- 博客(198)
- 资源 (19)
- 收藏
- 关注
原创 程序员的自我修养(链接、装载与库)--摘录与汇总(二)
因为编译器编译期间无法确认是模块内的还是模块外的很明显,外部模块的全局变量是和装载地址有关的,也就是“变化”的,按照 PIC 的基本思想,需要把这部分变化的挪到数据段中,而数据段中存放这类数据的叫做。
2024-10-14 19:46:38 891
原创 程序员的自我修养(链接、装载与库)--摘录与汇总(一)
1、“未初始化的全局变量”在目标文件中并未放到 .bss 段中,而是标记为一个 COMMON 类型的变量,这是因为“未初始化的全局变量”是一个弱符号,其最终占用的大小未知,所以编译器此时无法为该弱符号在 BSS 段分配空间。在链接之前,目标文件中的所有段的 VMA(虚拟地址 Virtual Memory Address) 都是 0,因为虚拟空间还没有被分配,所以他们默认都为 0,等到链接之后,可执行文件中的各个段都被分配到了相应的虚拟地址。而每个副本进程的数据区域是不一样的,他们是进程私有的。
2024-09-29 21:11:21 857
原创 sqlite3 相关知识
WAL 模式 VS 日志模式特性WAL 模式日志模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始事务时写入日志文件,完成后再更新主数据库。读操作读
2024-09-05 15:09:33 596
原创 程序员的自我修养--术语随笔
总之,PLT 是为了实现共享库的动态链接而设计的一个重要的数据结构。它能够在程序运行时动态地解析共享库函数的地址,从而使得程序在不同的环境中能够正确链接到共享库中的函数。这对于实现共享库的延迟绑定和动态链接非常重要。当程序调用共享库中的函数时,实际上是首先跳转到了 PLT 的相关条目。这个 PLT 条目会调用动态链接库中的函数。(或者类似的函数),这个函数会进行符号解析和重定位。
2024-09-02 21:19:05 284
原创 C++基础知识(四)
链接时重定位和装载时重定位特性链接时重定位装载时重定位发生时机发生在编译器进行静态链接或动态链接时发生在程序加载到内存并准备执行时作用将各个目标文件、库文件中的位置无关的代码链接成一个单独的可执行文件或库文件,并对符号进行最终的地址绑定。将可执行文件或共享库中的引用符号和实际地址进行绑定,确保程序能够正确地访问共享库中的函数和数据。阶段链接阶段装载阶段静态链接 VS 动态链接特性静态链接动态链接生成的文件大小独立性独立
2024-09-02 10:21:23 298
原创 常用的几个网站
https://www.cs.usfca.edu/~galles/visualization/Algorithms.htmlhttps://compiler-explorer.com/https://cs.android.com/https://www.json.cn/https://www.bejson.com/convert/filesize/https://tool.chinaz.com/Tools/unixtime.aspxhttps://www.99cankao.com/digital-compu
2024-08-19 15:39:13 179
原创 c++ 基础知识(一)
使用时,适合简单的临界区管理,因其简单易用,且性能开销较小。使用时,适合需要更复杂锁定机制的场合,比如条件变量,或需要手动控制锁定和解锁的场合。根据具体的需求和场景来选择合适的锁类型,可以提高代码的可读性和性能。虽然 constexpr 不能直接用于声明指向运行时确定的数据的指针,但在某些情况下,可以使用 constexpr 指针来指向编译期就能确定的数据。这通常用于需要在编译期就能确定值的场景,例如初始化静态数组或参与模板元编程。区别总结const:用于声明常量,但不一定能在编译期计算出值。
2024-08-16 14:41:44 939
原创 修复苹果电脑运行过程中出现的声音、触摸板失灵、键盘错键、光标乱窜问题
1、首先确保机器关机状态2、同时按下Command+Option+P+R,不要松手,在按下开机键3、听到4次开机声音和画面后,松开四个键,重置PRAM成功实际当中有可能只听到声音看不到画面,也属正常4、重新启动电脑正常以上操作可以修复苹果电脑在运行过程中产生的小BUG,比如声音、键盘错键、触控板失灵、光标乱串等异常紊乱现象。同时可以清除系统产生的垃圾以及冗错,这个过程不会对用户数据产生影响。...
2022-03-03 10:43:51 4180
原创 给 Django 日志加上 request id,方便追踪请求
注:本文大部分内容参考自:https://blog.csdn.net/handsomekang/article/details/78661392但是因为原文有些点没有说的太清楚,不是面向初学者的,特把相关点说清楚request id 用来标识同一个请求的日志,方便检索和分析。request_id用一个小算法自动生成。如果请求头有 X-Request-ID,就用请求头的,这样一个请求涉及多个...
2019-11-01 17:02:44 3196 3
原创 ios 12 以上如何将权限设置为“受限制的权限”
一、拍照–camera系统设置 -> 屏幕使用时间 -> 内容和隐私访问限制 -> 允许的 app -> 关闭相机二、定位 – location系统设置 -> 屏幕使用时间 -> 内容和隐私访问限制 -> 定位服务 -> 不允许更改注意:以上步骤一定要在 app 申请定位权限之前就设置好,如果之前设置过了,那么权限就会与之前的设置...
2019-09-02 16:50:34 1789
转载 用正交表设计测试用例(转载)
查看正交表使用时发现此篇解释较详细,且讲述了“因素数不同”及“水平数不同”的情况,而此项是其他文章里未讲述及讲述不清的,转载至此,以备查看请优先阅读原文原文链接如下:https://www.cnblogs.com/gisen_6/p/3708169.html以下为转载内容用正交表设计测试用例正交试验设计(Orthogonal experimental design)是研究多因素多...
2019-08-02 12:06:25 3933
原创 随手指滑动的悬浮窗 onTouchListener
private class FloatingOnTouchListener implements View.OnTouchListener { private int x; private int y; private int touchSlop; private boolean handleBySelf = false; ...
2019-07-05 14:53:55 782
原创 adb 操作剪贴板
辅助工具:Clipper地址:https://github.com/majido/clipper使用:首先启动 serviceadb shell am startservice ca.zgrs.clipper/.ClipboardService设置剪贴板内容:am broadcast -a clipper.set -e text "this can be pasted now"...
2019-06-24 20:27:30 14983 3
原创 android 手机模拟低内存
注:需要 root 手机原理修改 android 系统 prop 中的 dalvik 堆大小-dalvik.vm.heapstartsize堆分配的初始大小,调整这个值会影响到应用的流畅性和整体ram消耗-dalvik.vm.heapgrowthlimit受控情况下的极限堆(仅仅针对dalvik堆,不包括native堆)大小-dalvik.vm.heapsize不受控情况下的...
2019-04-26 16:40:06 2587
原创 dex2jar 报错 com.googlecode.d2j.DexException: not support version
参考链接:https://www.jianshu.com/p/55bf5f688e9ahttps://source.android.com/devices/tech/dalvik/dex-format#dex-file-magic原因:dex2jar 的版本与要解析的 dex 文件的版本不匹配造成的方案:使用对应版本的 dex2jar使用二进制编辑工具修改 dex 文件的版本...
2019-04-08 16:48:45 14648 6
原创 简单有效的ItemDecoration--分割线
1、ItemDecorationclass ItemDecoration extends RecyclerView.ItemDecoration { private Drawable mDivider; public ItemDecoration(Drawable divider) { mDivider = divider; ...
2019-04-03 20:10:32 1020 1
原创 python ftp 上传文件和文件夹
其中 session = session = ftplib.FTP(host=”,user=”,passwd=”)def upload_dir(path_source, session, target_dir=None): files = os.listdir(path_source) # 先记住之前在哪个工作目录中 last_dir = os.path.abspa...
2018-08-06 20:55:19 8606 4
原创 简化常用命令(修改 .bash_profile 文件)
在 ~/.bash_profile 文件中增加以下内容# adb cmdalias ashell='adb shell'alias akill='adb kill-server'alias astart='adb start-server'alias apush='adb push 'alias apull='adb pull 'alias areboot='adb reboot...
2018-08-02 16:55:26 2592
原创 字节顺序-大端、小端
原文链接: https://zh.wikipedia.org/zh-hans/%E5%AD%97%E8%8A%82%E5%BA%8F 字节顺序,又称端序或尾序(英语:Endianness)。在计算机科学领域中,是跨越多字节的程序对象的存储规则。在几乎所有的机器上,多字节对象都被存储为连续的字节序列。 例如在C语言中,一个类型为int的变量x地址为0x100,那么其对应地...
2018-05-31 21:25:25 933
原创 刷入第三方 recovery twrp
1. 下载设备对应的 twrp 文件打开 twrp 官方地址 找到适配待刷设备的的twrp 比如 Nexus 6 * 首先找到设备厂商 Motorola * 然后找到设备具体型号 * 然后找到下载地址 * 下载最新版即可 下载最新的twrp存到电脑上,改名(方便后面输入,比如此处改名为 twrp_nexus6.img...
2018-05-28 10:33:06 116494 1
原创 一些常用的自定义命令
使用时将以下内容拷贝到 ~/.bash_profile 文件中即可# adb cmdalias ashell='adb shell'alias akill='adb kill-server'alias astart='adb start-server'alias apush='adb push 'alias apull='adb pull 'alias areboot='adb r...
2018-05-28 09:48:00 1115
原创 gradle 下载 SMB 文件(实际使用的是 groovy 语法)
import java.util.concurrent.CountDownLatchimport java.util.concurrent.ExecutorServiceimport java.util.concurrent.Executors/** 26/07/2017 */abstract class ADownloader { static class Type {...
2018-03-13 17:32:37 455
原创 自己写的 groovy 处理耗时操作的一个类
import org.gradle.api.GradleExceptionimport java.util.concurrent.*/** 15/08/2017 耗时操作 */class TimeConsuming { static final ExecutorService EXECUTOR = Executors.newCachedThreadPool() ...
2018-03-13 17:26:46 930
原创 Java 中 8 进制和 16 进制的表示方法
由于数据在计算机中的表示,最终会以二进制的形式存在,所以有时候使用二进制可以更直观的解决问题。 但是二进制太长了,比如 int 类型占用 4 个字节, 32 位,比如 100, 用 int 类型的二进制表达将是0000 0000 0000 0000 0000 0000 0110 0100这种方式在代码中写起来很不方便,java 中也没有提供在代码中直接写二进制数的方法。八进制的表示法:8 进制数必
2017-11-25 09:56:00 12115
翻译 Implementation vs API dependency
原文链接: https://jeroenmols.com/blog/2017/06/14/androidstudio3/更新到 Android Studio 3.0 之后,构建多 module 结构的项目速度有很大的提升,但不幸的是这同样意为着 Gradle 插件的 API 也做了修改.本文将详细的介绍本次改变的优点,以及使你能够顺畅应用升级。目前的问题为了理解 Gradle plugin
2017-11-08 20:31:37 2709
原创 约束布局解析
1、相对定位:属性都形如 layout_constraint’DIRECTION’_to’TARGET DIRECTION’Of=”TARGET“ 1、constraint’DIRECTION’ 里的 ‘DIRECTION’代表是这个子控件自身的哪条边 2、to’TARGET DIRECTION’Of 里的 ‘TARGET DIRECTION’ 代表的是和约束控件的哪条边发生约束 3
2017-11-06 19:33:58 1313
原创 Android Studio 按下Ctrl + 鼠标滚动 缩放编辑文本的大小
Settings->Editor->General->Change font size(Zoom)with Ctrl+Mouse Wheel!
2017-10-18 17:39:04 10569
原创 android 连续事件处理
场景:手指点击屏幕之后,滑动一段距离然后抬起事件:ACTION_DOWN、ACTION_MOVE、…、ACTION_MOVE、ACTION_UP先说结论: 如果子 view 未消费上次事件,那么后续事件不会再传递给它(也不再调用 onInterceptTouchEvent 方法) 如果子 view 消费了上次的事件,那么后续事件都会尝试着传递给它;后续事件会调用 onIntercept
2017-09-18 17:20:22 504
原创 将项目改为 gradle 构建并保留原 git 信息
本文使用 Intellij IDEA IntelliJ IDEA 2017.1.5 Build #IC-171.4694.70, built on July 4, 2017 JRE: 1.8.0_112-release-736-b21 x86_64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Mac OS X 10.
2017-09-12 10:16:40 1810
原创 android build 完成时发出通知
此文中设置只针对 mac 系统,如果想在其他系统使用,请修改一下 play task 相关的代码优化版,直接监听 gradle buildFinishedproject.gradle.buildFinished { BuildResult buildResult -> Task playTask = project.rootProject.tasks.getByName('play')
2017-08-14 19:24:10 956
转载 Error parsing XML: unbound prefix on XXX解决办法
在XML文件中使用了自定义的域名空间(ns),如app:,编译时报错XXX XML文件类似于如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout android:orientation="vertical" android:id="@+id/myScrollLayout" android:layout_width="fill_parent
2017-07-27 14:42:53 1041
原创 Android 签名时 v2 与 v1 的选择
注:对于 v2 与 v1 的对比不在此文讨论范围结论: 一定可行的方案: 只使用 v1 方案 不一定可行的方案:同时使用 v1 和 v2 方案 对 7.0 以下一定不行的方案:只使用 v2 方案 PS: 如果要支持 Android 7.0 以下版本,那么尽量同时选择两种签名方式,但是一旦遇到签名问题,可以只使用 v1 签名方案签名打包时签名版本(Signature
2017-07-06 13:00:08 16917
原创 plantUML编辑器整理
如果你平常的编辑器就是 Intellij 系列软件,那么推荐直接使用Intellij 插件(最后一个)在线编辑器:https://www.planttext.com/ 推荐这个 预览如下: http://www.plantuml.com/plantuml 预览如下: https://sujoyu.github.io/plantuml-previ
2017-06-07 10:41:03 7134
原创 api level 对照
https://developer.android.com/guide/topics/manifest/uses-sdk-element.html?hl=zh-cn#uses
2017-05-11 14:12:15 460
原创 nanoHTTPD 接收 okhttp 上传的文件
Explained before, the client use okhttp upload a file just like the follow code RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) //sourceFile i
2017-04-01 15:30:01 5329
JAVA核心技术:卷Ⅰ基础知识
2013-01-21
NIIT课堂笔记
2012-12-11
动态链接库运算器
2012-12-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人