- 博客(159)
- 资源 (16)
- 问答 (1)
- 收藏
- 关注
原创 Windows内核--NtCreateFile和ZwCreateFile(3.)
NtCreateFile是实作创建文件,ZwCreateFile调用NT系统服务API完成。
2024-05-24 20:31:20 170
原创 算法入门----小话算法(1)
Q1: 如何证明时间复杂度O(logN) < O(N) < O(NlogN) < O(N2) < O(2N) < O(N!1+2+...+n+(n+1) = n(n+1)/2+(n+1)=(n+1)(n+2)/2.显然成立。所以两式相加: 2S=(n+1)+(n+1)+...+(n+1)+(n+1)=n(n+1);当N = 1时成立,假设上面成立,现在只要证明N + 1 < 2N+1。Q2:如何证明1+2+.....+n = n(n+1)/2?假设S=1+2+...+(n-1)+n。
2024-05-24 20:26:05 234
原创 abs(-2147483648) == 2147483648?
所以,-2147483647 == 0x80000000 ----> 求补得到0x80000000.negl是求补指令,用零减去操作数,然后结果返回操作数。也可以表达成:将操作数按位取反后加1.从数学意义上,这是对的。我们从source code中一一解开.
2024-05-23 19:10:58 360
原创 Windows内核--DMA
DMA工作期间,占用内存访问总线,和CPU访问内存总线是冲突的。DMA并不是完全和CPU工作并行,如果CPU只是在对内部寄存器操作,没有访问内存,CPU可以和DMA同时工作。一旦CPU也需要访问内存,就必须等DMA放开对内存总线的占用才能继续。
2024-05-23 19:09:11 111
原创 ios 设置应用程序边角的字符串
可以通过官方SDK的UIApplication类的如下属性设置:@property(nonatomic) NSInteger applicationIconBadgeNumber;私有API中有更强大的功能,可以设置边角字符串,即不限于是数字:- (void)setApplicationBadgeString:(NSString *)str;
2024-05-22 19:27:04 553
原创 随机论---生命起源随想
昨天晚上,突然再次联想到宇宙,想到地球,想到生命的起源,随机论的观点我觉得似乎有点靠谱。到底什么组成了生命?换一种DNA是否是一种新生命?再换一种DNA是否就不是生命,而是非生物?由C、H、O等元素的恰当组合就成了生命,如果有造物主,且他们懂得如何创造智能生命,那么有可能他们按照这种方式将人类造出来了;但是假设没有造物主,或者也没有外星人干涉,那么就基本可以确定生命的起源没有任
2024-05-22 19:26:10 793
原创 做产品,请不要忽视技术的重要
其实,它和金钱的关系是一样的,金钱不是万能的,但是没有金钱是万万不能的。技术在软件行业所处的位置比较高这是毋庸置疑的,当然,这并没有说创意、产品、市场地位不高,应该说,它们有时有的所处的地位较低,有时所处的地位偏高,甚至很高。其实,对开发的要求还是挺高的,各种辩证思维都集中在一起,敢于坚持该坚持的,敢于放弃自己错误的想法而学习别人好的建议,能够很好地对于完美和不完美做正确判断,这是每个开发都要学会的辩证思维。其实,这里,一切其实不是以开发为核心,但是却必须依赖开发的技术,前面是个可能的,后面是个必须的。
2024-05-21 19:41:08 6540 29
原创 批处理加入域
注意:netdom.exe是windows 7之前的系统(Server 2003, XP)上使用的一个实用工具,加不了附件,你们可以到网上下载。@set /p computerName="请输入要加入域的计算机名(域账号名):"
2024-05-21 19:39:30 2024
原创 批处理--将指定磁盘根目录所有隐藏的文件(包括文件夹)去除隐藏属性
批处理--将指定磁盘根目录所有隐藏的文件(包括文件夹)去除隐藏属性。如下是实现的脚本:--------------------------------------------------微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。助您在编程路上越走越好!
2024-05-20 20:07:06 1349
原创 获取执行时间的宏
你可能注意到了,这里用的变量名很奇怪, ___xxx_xiyi_eyu_maomao, 这是为了避免和之前使用的局部变量重复,导致在宏中间误使用了局部变量。微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。助您在编程路上越走越好!
2024-05-20 20:01:55 1677
原创 软件公司加班的根本原因
软件公司加班,这应该是个很寻常的事情;其实加班不应该是一个感到不舒服的事情,任何公司或单位都会加班,只是程度不同而已,程度才决定了算不算舒服。 加班不一定是坏事,看是什么情形。 为什么会加班呢 加班一般是没做完事情的直接结果。 但是可能有两种可能,一种是应该完成的事情没有完成导致的; 另一种即是一些特殊情况,这种情况就没什么说的,做就做吧。
2024-05-19 12:56:08 5651 5
原创 内存屏障和同步屏障傻傻分不清楚
在大多数处理器的实现中,这个屏障是个万能屏障,兼具其它三种内存屏障的功能。这是因为在同步区内对变量的写入操作,在离开同步区时就将当前线程内的数据刷新到主内存中,而对数据的读取也不能从缓存读取,只能从主内存中读取,这样就保证了数据的读写有效性。
2024-05-19 12:46:47 553
原创 欲懂类库,先懂api----小话MFC(1)
可以对比下,ntdll.dll, kernel32.dll, KernelBase.dll这3个dll被加载的地址和命令行控制台中输出的地址,能够发现后者正好在前面的范围之内。如此相近的函数只会让程序员更容易犯错,如下是两者的原型。
2024-05-18 10:15:49 2899 1
原创 happens-before是何方神圣
1.Java内存模型(Java Memory Model或JMM)里定义的happens-before 规则指的是:用于描述多线程中变量读写等不同操作之间的内存可见性,若操作 A happens-before 操作 B ,那么操作 A 的结果对操作 B 可见。4. 传递规则: 若操作 A happens-before 操作 B,而操作 B 又 happens-before 操作 C,则操作 A happens-before 操作 C。的字节码执行完之后的操作结果对靠后的字节码可见。
2024-05-18 10:09:32 568
原创 Windows内核--从DOS到NT内核发展历程(1.)
微软操作系统早期是MS-DOS, 基于此发展成Windows 95/98/Me.Windows NT内核经历Windows NT 3.1/3.5/4.0, Windows 2000(NT5.0)/XP/Server 2003, 再后来Vista/Server 2008和Win7都是NT内核(Vista虽然花哨, 功臣并不是内核)。早期的Windows版本太旧,下面从Windows XP开始介绍。NT代表New Technology.
2024-05-14 19:22:20 375
原创 Windows内核--Kernel API简析(3.1)
如果所有的内核提供的功能,内核提供进程/线程创建和终止,内存分配和释放,文件操作,网络功能,驱动程序加载和卸载等功能。这些API将在后面陆续介绍,如下先介绍Kernel提供的基础API(Kernel自身或Driver使用).类似libc malloc/free/memset系列函数。类似于libc printf.类似libc string函数.
2024-05-14 19:18:58 347 1
原创 不同数据类型的内部秘密----编程内幕(2)
可以看到shll左移%cl: 0x20即32位. 有一部分书籍说,左移语句对于超过数据大小比特长度会采用模比特长度的方式得到最终左移的位数,并认为这是编译器的行为. 其实不然,这是指令集的行为.此时,证明了char被提升为int.
2024-05-12 12:06:55 463 1
原创 HashMap 和 Hashtable区别的底层原理
1.HashMap 是先将 key 键的 hashCode 经过扰动函数扰动后得到 hash 值,然后再利用 hash & (length - 1) 的方式(由于 HashMap 的容器容量一定是 2 的 n 次方,所以可以使用 hash & (length- 1) 的方式代替取模的方式计算元素的位置从而提高运算效率)代替取模,得到元素的存储位置。1.HashMap 的 key 和 value 都允许为 null , HashMap 在 key 为 null 的时候,值必须为null。
2024-05-12 11:45:46 435
原创 求阶乘n!末尾0的个数溢出了怎么办
6,227,020,800来举例,保存它的值的数据类型为long long,大小为4个字节,最大值为2147483648,用6227020800%2147483648得出的值即为1932053504。的末尾的0的个数应为:n!
2024-05-10 19:42:58 462 2
原创 WebSocket概述
7、HTTP规范要求浏览器将并发连接数限制为每个主机名2个连接,但使用WebSocket时,当握手完成后,该限制就不存在了,因为此时的连接已经不再是HTTP连接了。8、WebSocket协议支持扩展,用户可扩展协议,实现部分自定义的子协议。
2024-05-10 19:31:54 203
原创 不要以为C语言很独特!
C语言因Unix名声大噪,Simula奠定了面向对象程序设计的基石,C++博大精深,可提供绝对自由度和犯错的无与伦比的感觉,Java/C#等语言正是在C++巨人的肩膀迅速前行。微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
2024-05-09 19:41:55 300 1
原创 算法系列之堆排序实践哪家强
对于要排序为大顶堆的算法来说:初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个堆,最后堆的根节点的数最大。从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。
2024-05-08 19:49:59 450
原创 git stash技巧
(7)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0}。(6)git stash apply :应用某个储藏,但不会把储藏从储藏列表中删除,默认使用第一个储藏,即stash@{0}。(8)git stash drop stash@{$num} :丢弃stash@{$num}储藏,从列表中删除这个储藏。(4)git stash list :查看当前stash的所有储藏。
2024-05-08 19:48:02 661
原创 分布式版本控制系统git的使用技巧
相反,它会将你的分支更改放在另一个分支的顶部,从而保持一个线性的提交历史。这通常用于将一个分支的更改集成到另一个分支,同时保持一个清晰、线性的提交历史。:如果你在一个分支上进行了多次提交,并且想要将这些提交合并成一个单一的提交,你可以使用。
2024-05-07 19:47:45 1230
原创 Android中正确启动一个页面的方法
若当前App在后台,则将当前App拉起到前台,不改变源App的当前打开页面。若App未启动,则启动App到前台。1.通过要启动的Activity的类名直接启动一个Activity,假设要启动的Activity的类名为TestActivity。
2024-05-07 19:45:48 521
原创 Android输入法与扫码枪冲突问题解决方案
在Android中,有时一个文本输入框EditText获得焦点后用扫码枪进行扫码输入,而不是通常的用输入法输入,这时EditText对输入法和扫码枪的处理可能存在冲突,造成输入异常。这时可以使用自定义EditText来解决,代码如下。
2024-05-06 11:24:38 314 3
原创 嵌套滑动解决之法
1.竖向滑动的RecyclerView重写canScrollVertically()方法,水平滑动的RecyclerView重写canScrollHorizontally方法。微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
2024-05-06 11:19:45 349
原创 跨平台开发框架介绍
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。
2024-05-05 12:26:39 573 4
原创 垃圾收集器你不知道的点
2.在JDK1.7正式引入,采用分区回收的思维,将堆内存划分为多个大小相等的区域,优先回收价值最大的区域,基本不牺牲吞吐量的前提下完成低停顿的内存回收。可预测的停顿是其最大的优势。3)重新标记-短暂,为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。由于整个过程中耗时最长的并发标记和并发清除过程收集器线程都可以与用户线程一起工作,所以,从总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。
2024-05-05 12:20:45 944 1
原创 Android平台下adb命令的使用技巧
Android允许我们通过ADB,把Android上的某个端口映射到电脑的某个端口(adb reverse),或者把电脑的某个端口映射到Android系统的某个端口(adb forward)。
2024-05-04 11:48:13 532 1
原创 堆内存分配策略傻傻不清楚
6.空间分配担保:新生代中有大量的对象存活,Survivor空间不够,当出现大量对象在Minor GC后仍然存活的情况(最极端的情况就是内存回收后新生代中所有对象都存活),就需要老年代进行分配担保,把Survivor无法容纳的对象直接进入老年代。
2024-05-04 11:44:04 430
原创 算法系列之二叉树先序遍历最佳实践原来是这样
二叉树先序遍历(也叫前序遍历)算法分为递归遍历和非递归遍历2种实现方式。微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。递归遍历容易理解,但可能会占用较大的栈空间,需防止出现栈溢出。助您在编程路上越走越好!
2024-05-03 12:43:07 212
原创 垃圾回收算法你不知道的奥秘
空间整合:与CMS的"标记—清理"算法不同,G1从整体来看是基于"标记—整理"算法实现的收集器,从局部(两个Region之间)上来看是基于"复制"算法实现的,但无论如何,这两种算法都意味着G1运作期间不会产生内存空间碎片,收集后能提供规整的可用内存。使用G1收集器时,Java堆的内存布局就与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分Region(不需要连续)的集合。
2024-05-03 12:33:06 878
原创 写自己的c库----小话c语言(19)
作者:陈曦日期:环境:[Mac 10.7.1 Lion Intel-based x64 gcc4.2.1 xcode4.2]转载请注明出处Q:对于c代码,经常可能被c++代码使用,所以经常需要使用extern "C"语句,老是写这段代码真是很烦人,有什么好的方法?A:对于重复代码来说,宏无疑是个很好的方法。#if defined(__cplusplus)#d
2024-05-02 14:39:19 33 1
原创 算法系列之二叉树中序遍历最佳实践你知道吗
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。递归遍历容易理解,但可能会占用较大的栈空间,需防止出现栈溢出。二叉树中序遍历算法分为递归遍历和非递归遍历2种实现方式。助您在编程路上越走越好!以下以Java语言代码作为示例。
2024-05-02 14:15:19 131 4
原创 逃逸分析、栈上分配、标量替换大展神威
因为启用逃逸分析和标量替换默认是打开的,所以,JVM的参数只用-server时一样可以有栈上分配的效果。当然不是,这个可以通过配置文件来永久性的调整。1.虚拟机提供的一种优化技术,基本思想是,对于线程私有的对象,将它分配在栈上,而不分配在堆上。
2024-05-02 14:07:03 435 2
原创 Android常用开源库所使用的设计模式有哪些?
在RxJava中,Observable(被观察者)发出事件或数据项,而Observer(观察者)或Subscriber(订阅者)则订阅这些事件,并对它们进行响应。Gson在创建特定类型的对象时,如解析器和序列化器时,使用工厂模式。
2024-05-01 11:47:14 324
原创 虚拟机中new指令的秘密
类的加载、链接(验证类文件格式、准备类的静态变量、解析符号引用)和初始化(执行类的静态初始化代码和静态字段赋值)是在首次使用该类时(如:创建类的实例、访问类的静态字段或调用类的静态方法)由JVM的类加载器自动完成的。内存空间会被初始化为零值。
2024-05-01 11:43:48 334 3
原创 指针碰撞、空闲列表和内存分配的并发安全问题的底层秘密
如果Java堆中的内存并不是规整的,已使用的内存和空闲的内存相互交错,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称为"空闲列表"。如果Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种分配方式称为"指针碰撞"。四、内存分配的并发安全问题。
2024-04-30 11:47:11 158 2
JESD209-4B-LPDDR4 中文解读 v2.3
2022-10-23
DRAM技术精解(第三版 中文) DDRX LPDDRX
2022-10-23
DRAM技术精解(第二版 中文) DDR3_DDR4_DDR5_LPDDR3_LPDDR4_LPDDR5.pdf
2022-04-24
JESD209-5_4_3 LPDDR5 LPDDR4 LPDDR3精解
2022-03-12
JESD209-4_3 LPDDR4 LPDDR3精解.pdf
2021-12-12
JESD209-3 LPDDR3精解.pdf
2021-11-26
JESD79-5_4_3 DDR5 DDR4 DDR3精解.pdf
2021-11-21
JESD79-4B DDR4 JESD79-3F DDR3 精解.pdf
2021-11-16
JESD79-3 DDR3 Technology.pdf
2021-11-13
JESD79-3 DDR3精解.pdf
2021-10-25
JESD79-4 DDR4解读.pdf
2021-10-13
DRAM技术精解(中文) DDR3_DDR4_DDR5_LPDDR3_LPDDR4_LPDDR5.pdf
2021-10-02
Android十年终极开发经验_助您不走弯路_快速晋级Android架构师
2021-08-08
JESD209-4C LPDDR4解读.pdf
2021-08-01
JESD79-3F_DDR3 中文注释解读 v3.pdf
2021-07-18
JESD79-E_DDR 中文注释解读 v2.2.pdf
2021-07-17
JESD209-4B_LPDDR4 中文注释解读.pdf
2021-06-18
DRAM Technology DDR3_DDR4_DDR5_LPDDR3_LPDDR4_LPDDR5技术精解.pdf
2021-01-31
DDR4为何没有类似LP3的CA training或者LP4的CBT?
2020-12-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人