首页
学习
活动
专区
工具
TVP
发布

Open软件开发小组

专栏作者
52
文章
51504
阅读量
15
订阅数
深度解密Android中基于plt/got的hook实现原理
我们日常开发中编写的C/C++代码经过NDK进行编译和链接之后,生成的动态链接库或可执行文件都是ELF格式的,它也是Linux的主要可执行文件格式。我们今天就要借助一个示例来理解一下android平台下native层hook的操作和原理,不过在这之前,我们还是要先了解一下ELF相关的内容。
open
2020-03-19
3.3K0
简述面向对象六大设计原则
怎么写出优雅的代码?看了一些开源库比如OkHttp、Retrofit等,真的很佩服里面的设计之精巧,对于设计模式的应用恰到好处。然而在项目中,我们在业务开发的时候很少会有这样的代码。因为,大部分而言对于讲究快的移动开发来说,代码的设计精巧已经不是那么的合适了。不是不重要,而是需要平衡投入和产出。所以,本篇追本溯源,聊聊面向对象的设计原则。设计模式只是在此基础上提炼的基本套路,可能生帮硬套会有点麻烦,但是如果在平时的开发过程中小到业务需求的开发,大到项目的架构,以此为准则,一定会有很好的改观。
open
2020-03-19
5420
Android面试题集
郭孝星,程序员,吉他手,主要从事Android平台应用架构以及公司技术品牌推广方面的工作。
open
2020-03-19
7970
略懂Java编程(一):Java世界里的对象
我们每天都与机器打交道,我们的眼里只有if、else,或者Exception。然而,回归了到真实的世界,总是那么的复杂,那么多的纠结。但是,回到虚拟的世界,我们可以随时new出我们想要的任何对象,这么多的对象,简直妃子三千,佳丽无数,我们真的懂它们吗?
open
2020-03-19
6160
为什么我写的程序有bug(一):逻辑篇
逻辑性错误也是出现bug的重灾区,有很多是因为逻辑性比较复杂,这个倒是可以理解。但是,很多时候出现的问题查了半天最后真想给自己一巴掌。人傻没办法,自己折腾自己。因为这个问题实在太弱智了。下面针对改bug的经历,做了个简单的分类。
open
2020-03-19
8960
简述JVM基础(七):Java 内存模型与线程
由于在进行运算时如果直接操作内存效率会比较低,用CPU又比较消耗资源,所以在中间加了一层高速缓存区,作为内存和处理器之间的缓存。进行运算时可以先在高速缓存区进行读写操作,运算结束后将结果同步到内存中。
open
2020-03-19
3480
简述JVM基础(六):虚拟机字节码执行引擎
物理机的执行引擎是直接在物理硬件如CPU、操作系统、指令集上运行的,但是对于虚拟机来讲,他的执行引擎由自己实现。 执行引擎有统一的外观(Java虚拟机规范),不同类型的虚拟机都遵循了这一规范,输入字节码文件,解析字节码处理,然后输出结果。
open
2020-03-19
6560
简述JVM基础(五):虚拟机类加载机制
我们一定心里有个疑问,我们那个多态是怎么回事?我们指定的一个接口,却可以等到运行时可以对应于不同的实现类。这是因为,Java有个特性就是依赖运行期动态加载和动态连接,这样实现了Java可以动态进行扩展。我们甚至可以从网络或者其他的地方加载一个二进制流作为程序的一部分。所以,我们通过编译器将我们写的Java文件代码编译成Class文件,程序跑起来的时候通过加载器。
open
2020-03-19
4860
简述JVM基础(四):类结构文件
Class文件是以8个字节为单位的二进制流,紧凑排列,中间没有空隙;如果想查看一个Class文件除了通过winHex编译器看到字节码,也可以通过javap -verbose xxx.Class 输出字节码内容,这样看起来比较直观。
open
2020-03-19
3540
简述JVM基础(三):垃圾收集器与内存分配策略
了解了JVM中的内存分配以及数据存储的情况,那么怎么分配的方式是最高效的,对于已经过期无用的内存占用我们怎么回收起来,这个活必须得有人来干。好在JVM自带有垃圾回收机制,我们不需要关心这些,但是当我们需要排除各种内存溢出,内存泄漏的问题时。了解其中的一些知识还是很有必要的。
open
2020-03-19
4230
简述JVM基础(二):Java内存区域与内存溢出异常
我们在进行Java开发的时候,很少关心Java的内存分配等等,因为这些活都让JVM给我们做了。不仅自动给我们分配内存,还有自动的回收无需再占用的内存空间,以腾出内存供其他人使用。但是我们经常面临的一个问题就是内存泄漏,JVM无法完成回收工作,导致内存占用暴涨,最后可能让程序奔溃。本章主要了解下运行时数据区域分布情况以及溢出异常。
open
2020-03-19
6430
简述JVM基础(一):走进Java
作为一名Android开发工程师,从用Java写的第一个HelloWorld至今差不多有三年了。一日在家不小心打开了《深入理解Java虚拟机》,就有一种非常想迅速把这本书读完的冲动。我突然才发现做Java开发已有三年之久居然没有真正的去了解它。随着项目的深入,我就必须要对其中的原理非常的了解,才能够做出高性能的程序,也是去避免那些各自无法理解的随机问题的基本功。
open
2020-03-19
3760
【GitLab专题】如何进行备份恢复与迁移?
前段时间,在某台CenterOS服务器上搭建了Gitlab环境,并且大家陆陆续续的都把代码从svn迁移到了gitlab,但是之前的CenterOS服务器并不是搭建在公司的机房环境,而是搭建在办公室的某台闲置的电脑上,因此为了保证数据安全性,领导要求为将之前的Gitlab数据全部重新迁移到公司机房的服务器上面去。
open
2020-03-19
1.4K0
深入理解Activity启动流程和AMS框架(三)
Intent中定义了一个标志FLAGACTIVITYNEW_TASK,在startActivity的Intent参数中加入该标志就能开启一个新的Task。但是,如果系统中已经有相同affinity的Task存在,这时候就不会再启动一个Task,而是将旧的Task带到前台。 Affinity的意思是“亲和度”、“密切关系”,它的类型是字符串,我们可以把它理解成Task的名称。Affinity字串在系统中是唯一的,AMS查找一个Task,最优先比较它的affinity。ActivityStack类中用来查找Task的方法是findTaskLocked()。
open
2020-03-19
1.1K0
深入理解Activity启动流程和AMS框架(二)
ActivityThread中的成员变量mActivities中保存了所有ActivityClientRecord对象,该类中重要的成员变量如下:
open
2020-03-19
1.7K0
深入理解Activity启动流程和AMS框架(一)
Android应用程序的载体是APK文件,它是一个组件和资源的容器。APK文件和我们常见可执行文件的区别是:每个可执行文件在一个单独的进程中,但是APK文件可能运行在一个单独的进程也可能和其他APK文件运行在同一个进程中。Android的设计理念是弱化进程的存在,取而代之以组件的概念。
open
2020-03-19
1.8K0
Android后台发送邮件进行日志反馈
最近在和解决用户反馈的问题,但是出现了不方便的事情.就是获取用户操作日志的问题.想来想去还是用比较隐晦的方法---发送邮件.(需要告知用户,不然会当成流氓的!)
open
2020-03-19
8420
FastJson那些事
Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
open
2020-03-19
5780
Android Binder 分析系列——原理(下)
图中我把相关的 jni 里面类也画了出来,这样就能更加明显的看到 java 层和 native 层的对应关系。
open
2020-03-19
7350
Android Binder 分析系列——原理(上)
分析之前说一下原理。为要 android 要搞这么复杂的一个东西。那是因为 android 是个多进程的系统,进程间的数据交换、相互调用(某几个程序配合完成某些业务)就涉及跨进程通信。2个进程不能直接访问数据的原因:
open
2020-03-19
1.4K0
点击加载更多
社区活动
RAG七天入门训练营
鹅厂大牛手把手带你上手实战,赢鹅厂证书、公仔好礼!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档