KS-工作经验总结

  1. C语言中无符号数和有符号数之间的运算,默认会将有符号数看成无符号数进行运算。

  2. Android PLT Hook的基本原理:Linux 在执行动态链接的ELF的时候,为了优化性能使用了一个叫延时绑定的策略。这个策略是为了解决原本静态编译时要把各种系统 API 的具体实现代码都编译进当前 ELF 文件里导致文件巨大臃肿的问题。所以当在动态链接的 ELF 程序里调用共享库的函数时,第一次调用时先去查找 PLT 表中相应的项目,而 PLT 表中再跳跃到 GOT 表中希望得到该函数的实际地址,但这时 GOT 表中指向的是 PLT 中那条跳跃指令下面的代码,最终会执行_dl_runtime_resolve() 并执行目标函数。第二次调用时也是 PLT 跳转到 GOT 表,但是 GOT 中对应项目已经在第一次 _dl_runtime_resolve() 中被修改为函数实际地址,因此第二次及以后的调用直接就去执行目标函数,不用再去执行 _dl_runtime_resolve() 了。因此,PLT Hook 通过直接修改 GOT 表,使得在调用该共享库的函数时跳转到的是用户自定义的 Hook 功能代码。

  3. java 中只要静态变量没有被销毁也没有置 null ,其对象一直被保持引用,也即引用计数不可能是0,因此不会被垃圾回收。因此,单例对象在运行时不会被回收。

  4. 一般我们可以使用 $(wildcard *.c) 来获取工作目录下的所有的 .c 文件列表。$(MY_CPP_LIST:$(LOCAL_PATH)/%=%) 的语法含义,它的意思是对 MY_CPP_LIST 中每一项,应用冒号后面的规则,规则是什么呢?规则是 $(LOCAL_PATH)/%=%,意思是,查找所有 $(LOCAL_PATH)/ 开头的项,并截取后面部分。

  5. dlopen:如果文件名 filename 是以“/”开头,也就是使用绝对路径,那么 dlopne 就直接使用它,而不去查找某些环境变量或者系统设置的函数库所在的目录了。否则 dlopen 就会按照下面的次序查找函数库文件:1. 环境变量 LD_LIBRARY 指明的路径。 2. /etc/ld.so.cache 中的函数库列表。 3. /lib 目录,然后 /usr/lib。不过一些很老的 a.out 的 loader 则是采用相反的次序,也就是先查 /usr/lib,然后是 /lib。dlopen() 函数中,参数 flag 的值必须是 RTLD_LAZY 或者RTLD_NOW。

  6. c++ 类不用 new,直接使用类定义申明,此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行。而 new 申请的对象,则只有调用到 delete 时再会执行析构函数,如果程序退出而没有执行 delete 则会造成内存泄漏。

  7. 在读写文件 SharePerfrences 的使用中,需要注意不要频繁调用 apply 或者 commit 方法。一般优化方法是合理拆分 sp 文件,一个 sp 文件不要包含太多的项,同时每一项的内容尽量短。尽量批量提交数据后再 commit 或者 apply 。

  8. Android 应用启动的流程:从点击桌面图标,到应用启大概会经过以下流程:Launcher startActivity -> AMS startActivity -> Zygote fork 进程 -> ActivityThread main ( ActivityThrad attach、handBindApplication、attachBaseContext、installContentProviders、Application onCreate) -> ActivityThread 进入 loop 循环 -> Activity 生命周期回调, onCreate、onStart、onResume …

  9. docker images 、 docker ps -a 、 docker container stop 、
    docker container rm 容器名或容器id
    docker ps / docker stop / docker container rm
    adb tcpip 5555 adb connect 192.168.0.101:5555

  10. 点击 Home 键再打开触发流程
    onPause -> onStop ->onRestart -> onStart -> onResume
    点击返回再打开
    onPause -> onStop -> onDestory -> onCreate -> onStart -> onResume
    旋转屏幕是一个 activity 销毁再重建的过程

  11. merge 和 rebase 实际上只是用的场景不一样
    尽量不要在公共分支使用 rebase
    合并 master 分支时,优先使用 rebase ,而不是 merge

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值