- 博客(115)
- 资源 (16)
- 问答 (1)
- 收藏
- 关注
原创 Android常用开源库所使用的设计模式有哪些?
在RxJava中,Observable(被观察者)发出事件或数据项,而Observer(观察者)或Subscriber(订阅者)则订阅这些事件,并对它们进行响应。Gson在创建特定类型的对象时,如解析器和序列化器时,使用工厂模式。
2024-04-26 15:59:23 183
原创 你真的懂CPU多核多线程吗
2.超线程技术(Hyper-Threading, HT):Intel引入超线程技术后,允许一个物理核心同时处理2个逻辑线程,使核心数与线程数形成1:2的关系,提高了系统的整体处理性能。指的是一个处理器核心能够在同一时间执行两个或更多的线程。
2024-04-26 15:49:46 65
原创 git版本库瘦身你知道吗
1)在要上传代码的当前分支下创建孤儿分支(孤儿分支不继承任何git提交记录,但暂存区和工作目录中的文件不会被自动清空。2)远程代码库中已上传了许多git提交记录,需要将远程代码库中的git提交记录删除,以减少代码占用空间大小。
2024-04-25 15:28:48 513
原创 动态代理有哪些神仙
它提供了更强大的代理功能,包括基于接口和基于类的代理,以及对方法拦截、字段操作等的全面支持。效率低,相比静态代理中 直接调用目标对象方法,动态代理则需要先通过Java反射机制 从而 间接调用目标对象的方法,因为 Java 的单继承特性(每个代理类都继承了 Proxy 类),即只能针对接口 创建 代理类,不能针对类创建代理类。动态代理分为基于接口的动态代理(被代理的对象必须实现一个或多个接口)和基于类的动态代理(这种代理方式不依赖于接口,而是直接基于类来实现,基于的类不能为final)。
2024-04-25 15:24:08 656
原创 Java泛型你所不知道的点
Java语言中的泛型则不一样,它只在程序源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型(Raw Type,也称为裸类型)了,并且在相应的地方插入了强制转型代码,因此,对于运行期的Java语言来说,ArrayList<int>与ArrayList<String>就是同一个类,所以泛型技术实际上是Java语言的一颗语法糖,Java语言中的泛型实现方法称为类型擦除,基于这种方法实现的泛型称为伪泛型。2)if(restrict instanceOf Restrict){}//不合法。
2024-04-24 17:47:03 449
原创 如何让Linux服务器下基于Netty的应用程序支持几十万乃至百万长连接
ulimit 命令分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。
2024-04-23 16:40:28 478 2
原创 git撤销更改的门道
从 git show 命令的结果中可以看到,merge commit 的 parent 分别为 a111111 和 b222222,其中 a111111 代表 master 分支,b222222 代表 另一个 分支。
2024-04-23 16:04:59 225 2
原创 BusyBox是何方神圣?
若不需root权限,可以复制到/vendor/bin目录或其他不需root的目录下。如果设备未root,可以将BusyBox命令安装到可以读、写、执行的普通目录下,如/data/tool/busybox,并添加到系统环境变量里。
2024-04-22 15:06:44 495 1
原创 大厂面试:二叉搜索树如何获取其中第k小的结点
例如二叉搜索树(20,10,30,2,11,24,38)中第三小结点的值为11。二叉搜索树的中序遍历结果正好是从小到大排序好的,按照中序遍历顺序找第k个节点。微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
2024-04-22 14:48:19 132
原创 synchronized和ReentrantLock傻傻分不清楚
在锁对象的对象头里面有一个 ThreadID 字段,在第一次访问的时候 ThreadID 为空,然后JVM让其持有偏向锁,并将 ThreadID 设置为调用锁对象的线程 ID,再次进入的时候会先判断 ThreadID 是否与其线程 ID 一致,如果一致则可以直接使用,如果不一致,则升级偏向锁为轻量级锁,通过自旋来获取锁,不会阻塞,执行一定次数之后会升级为重量级锁(映射到操作系统提供的互斥锁Mutex Lock上)。当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。
2024-04-21 15:52:50 351
原创 Java中sleep()和wait()的区别知多少?
1.sleep可能会抛出InterruptedException(这通常发生在其他线程中断正在sleep的线程时,中断时会清空当前线程的中断状态)和IllegalArgumentException (当设置的睡眠时间为负时)。
2024-04-20 16:28:54 388
原创 TCP断开连接为什么需要4次挥手?
客户端收到ACK后进入FIN-WAIT-2状态,收到服务端的FIN后发送最后一个ACK,并进入TIME-WAIT状态等待可能滞后的服务端数据报文,确认没有未送达的数据后,连接最终关闭。然后客户端接收到服务端发送的FIN,且服务端也收到了客户端发送的ACK之后,自此双方的数据通信完全结束。4次挥手过程提供了这样的机制,确保数据不会因为连接的关闭而丢失。总的来说,4次挥手是TCP协议为了确保连接可靠、有序地关闭而设计的,它允许双方都能完成数据的发送和确认,避免了数据丢失,并且确保了资源的合理释放。
2024-04-19 17:05:59 570
原创 TCP为什么需要3次握手?
客户端向服务端发送一个表示建立连接的SYN报文段,服务端从IP数据报中提取出TCP SYN报文段,为该TCP连接分配需要的缓存和变量,并向客户端发送表示允许连接的报文段ACK。客户端在收到ACK报文段之后,也要给该连接分配缓存和变量,客户端向服务器再发送一个报文段ACK,表示对允许连接的报文段进行了确认。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。您的支持是我们为您提供帮助的最大动力。
2024-04-18 20:35:56 602 1
原创 HTTP1.0、HTTP1.1、HTTP2.0、HTTP3.0傻傻分不清楚
不依赖TCP,基于QUIC协议。QUIC集成了TLS加密、流量控制、多路复用等功能,并在用户空间实现了快速连接建立、前向纠错、更精细的拥塞控制等特性。仍要求请求按顺序发送和接收,即存在"队头阻塞"问题,这意味着一个请求的延迟可能会阻塞后续的所有请求,影响整体加载速度。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。实现了多路复用连接共享,多个请求和响应可以在一个TCP连接上交错发送,解决了队头阻塞问题。
2024-04-17 17:06:26 606
原创 优雅的反转链表你知道吗
重复将首节点的下一个节点调整到最前面,如链表1->2->3->4,调整过程为2->1->3->4,3->2->1->4,4->3->2->1。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。将原链表的元素从头到尾入栈后,从栈顶到栈底的元素的顺序即为原链表反转后的顺序。您的支持是我们为您提供帮助的最大动力。使链表从尾节点开始指向前一个节点。
2024-04-16 14:05:30 246
原创 MinGW与Cygwin傻傻分不清楚
Cygwin 提供完整的类Unix 环境,是一个在Windows平台上运行的类UNIX模拟环境,它提供了一个UNIX模拟DLL以及在其上层构建的多种可以在Linux系统中找到的软件包。其主要目标是模拟UNIX/Linux环境,使得开发者可以在Windows上进行与UNIX/Linux相似的开发工作,或者将UNIX/Linux下的应用程序移植到Windows上。MinGW 环境下编译出来的程序,只能在Windows下跑,源码在linux环境下编译多半通不过,因为使用到了Windows下的API。
2024-04-15 18:19:22 798
原创 获取字符串的全排列(去除字符串中2个字符相同时造成的重复)
致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。您的支持是我们为您提供帮助的最大动力。以字符串abc为例,输出的结果为:abc、acb、bac、bca、cab、cba。以字符串aab为例,输出的结果为:aab、aba、baa。现有一个字符串,要打印出该字符串中字符的全排列。
2024-04-15 18:02:32 319
原创 大厂面试:排列与组合傻傻分不清楚
求所有组合也就是abc各个位是否选取的问题,第一位2种可能,第二位2种可能,以此类推,一共有2^n种可能。用0表示不取,1表示选取,这样可以用110这样的形式表示ab。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。1)排列:全排列即字符不能重复,第一位有3种选择,第二位有2种选择,第三位有1种选择,所以最后有3*2*1=6种结果。
2024-04-14 10:29:42 201
原创 大厂面试:获取字符串的可重复使用其中所有字符的全排列
现有一个字符串,要打印出该字符串中可重复使用该字符串中的所有字符的全排列。例如输入字符串ab,则打印出由字符a、b所能排列出来的可重复使用所有字符的所有字符串aa、ab、ba、bb。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。您的支持是我们为您提供帮助的最大动力。相当于每个位置都可以选择字符数组中的任何一个字符。可以基于递归算法来解决这个问题。
2024-04-13 16:00:01 155
原创 大厂面试:获取字符串的全排列
现有一个字符串,要打印出该字符串中字符的全排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。您的支持是我们为您提供帮助的最大动力。可以基于回溯法来解决这个问题。
2024-04-12 19:16:26 259
原创 Java泛型中 T 和 ? 傻傻分不清楚
而 T 表示了集合[所有Java类型,包括String,Integer,Character等系统定义的,或者用户定义的类型]中的一个成员。由于容器的具体类型未知,如果往容器添加元素,无法确保添加进去的具体数据是该容器具体类型的子类还是父类,因此存在类型不安全问题,所以是不允许往容器里添加数据的。使用T时,Java的类型参数支持多重限定,如
2024-04-11 18:46:44 1359
原创 Java与Kotlin语言的特色之处
4.更安全的类型转换 在Java中,类型转换时常会出现运行时异常,而Kotlin通过使用"as?协程提供了一种轻量级的并发模型,可以避免传统线程和锁的使用,简化了并发编程的复杂性。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。一个try块可能捕获到多个异常,可以使用多个catch块分别处理每个异常,也可以使用一个catch块处理多个异常(多个异常使用管道符|分隔)。不支持八进制的字面常量。
2024-04-11 18:30:19 280
原创 大厂面试:找出数组中第k大的数的最佳算法
如果堆的大小已经达到了k,我们就比较当前元素和堆顶元素(也就是堆中的最小元素),如果当前元素大于堆顶元素,我们就把堆顶元素替换为当前元素,再重新调整最小堆结构。这样,当遍历完整个数组后,堆顶元素就是数组的第k大元素(即是大小为k的最小堆(保存了数组中的最大的k个数)的最小元素)。n-1]的中间位置的一个元素 a[n/2]作为 pivot,对数组 a[0…p-1]、a[p]、a[p+1…3.将数组的所有元素构造一个大顶堆,然后删除堆顶元素k次并重新构成大顶堆,则第k次操作后的堆顶元素即为答案。
2024-04-09 13:18:25 570
原创 VS2019的c代码不包含stdio.h就无法编译通过?
致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。原因是VS2019将许多标准库采用内联方式处理,即不需要特别链接ucrt,所以需要特别指定使用legacy stdio lib来让链接器通过。您的支持是我们为您提供帮助的最大动力。您的支持是我们为您提供帮助的最大动力。
2024-04-08 14:36:45 111
原创 二叉树后序遍历算法多种实现傻傻分不清楚
因此利用栈(先进后出FILO,与正常顺序是反的)的性质,只需要按照根->右->左的访问顺序访问一次,并存入栈中,最后从栈顶输出所有栈节点就可以了。即我们在访问左子树之后需要访问右子树,然后才能再访问根节点,所以我们的根节点不能在访问左子树之后出栈,而是需要继续访问右子树,当我们右子树访问完成之后再出栈。算法的数据结构里,一个存储正常遍历需要的栈,一个存储最终输出的元素双端队列列表,所以也叫栈+双向队列法。算法需要两个栈,一个是正常遍历需要的栈,一个是存储倒过来的元素的栈,所以也叫双栈法。
2024-04-08 14:33:48 439
原创 Windows内核--任务、进程和线程(2.4)
Windows内核有"任务"概念吗? 从技术术语来说,Windows内核并没有"任务"。"任务"一般被认为是抽象的需要执行的事情。在不同操作系统上,"任务"所代表的官方名称有所差异。
2023-01-31 21:01:48 853
原创 Windows内核--GUI显示原理(6.1)
图形子系统内核部分win32k.sys 通过DDI接口操作显示驱动, 显示驱动通过ENG接口调用win32k.sys. Vista开始增加DWM进程,DWM(Desktop Window Manager)和以往的绘制最大的差异是屏幕绘制不再是各个App单独决定的,而是在后台视频存储区绘制之后再渲染。Aero效果、立体和翻转效果等都得益于DWM.
2023-01-02 13:01:44 1499 2
原创 Windows内核--CPU和内核(1.7)
ARM具备低功耗优势, 除了高通, 还有Broadcom/NXP等都支援ARM架构.苹果自研M系列开了头,ARM不仅有低功耗,同样有性能,Windows也想分一杯羹。
2022-12-31 15:31:21 1149
原创 Windows内核--内核空间和用户空间(3.6)
句柄, Handle, 表达处理、控制之意。内核不会直接暴露指针给用户空间,这样会增大内核风险。相反,内核抽象出Handle给用户态,不管是文件、进程、线程等对象,通过Handle可以隐藏内核细节,统一控制对象。不可避免,内核态对于Handle必须转换成指针才能处理。
2022-12-26 19:12:02 1078 1
原创 Windows内核--驱动程序和内核(1.6)
内核态驱动程序一般是和内核共同属于内核空间,驱动程序有能力访问内核大部分数据结构。内核根据需要,调用驱动程序执行相应的IO操作,如果驱动程序有异常,可以认为内核不稳定。一般情况下发生故障处理,典型的就是崩溃(dump)并重启, Windows的典型行为是蓝屏。
2022-12-25 15:40:50 1531
原创 Windows内核--内联函数之KeGetPreviousMode(3.3)
KeGetPreviousMode宏对应2句汇编,很高效。它是如何实现如此高效简洁的?
2022-12-14 21:45:10 402 1
原创 Windows内核--子系统(3.5)
子系统是用户层概念。在Windows内核之上,如果想要执行类UNIX应用程序,就是POSIX子系统,如果要类似OS/2环境,就是OS/2子系统。 如何能模拟出不同子系统呢? 一般需要子系统用户态应用程序和相关DLL支援。
2022-12-04 13:50:37 2283
原创 Windows内核--HAL在抽象什么?(3.4)
HAL位于内核最底层。“与硬件直接打交道“的这一层被称为硬件抽象层。HAL究竟在抽象什么?它的存在有多大的意义?
2022-11-25 21:54:55 928
原创 Windows内核--系统调用参数验证(5.1)
内核模式之所以有别于用户模式,在于内核模式应该是安全、可信的。用户系统调用可以传入各式各样的参数,可能是代码无意写错或因不预期的内存覆盖"暗地修改"参数,也可能是Hack有意传入,内核都应当妥善处理,避免内核读写到不预期的地址,造成内核被破解或不稳定。
2022-11-23 13:38:51 605
原创 Windows内核--CreateProcess到内核NtCreateProcess(2.3)
应用程序调用CreateProcess到内核执行NtCreateProcess究竟做了什么?
2022-11-19 19:38:39 1492
原创 Windows内核--裸调系统调用(4.1)
ntdll.dll NtCreateProcess将服务号0x82传入,通过syscall调入内核系统调用例程。syscall在做什么?在64位系统上,Windows使用syscall指令实现系统服务分发。syscall实现和int 2E类似的作用,只不过它更快速,看它名字"快速调用"。本文将新增一个系统调用来加深对syscal的理解。
2022-11-12 23:29:47 996
原创 Windows内核--内核汇编代码赏析: Rtl memory系列函数(3.3.1)
搜索WRK源代码,找不到memxxx相关函数的源代码。IDA工具查找ntoswrk.lib里memxxx函数的实现在ntoswrk.lib中。事实上,它们的实现并不难理解,根据不同硬件架构做优化是内核实现很重要的一部分。
2022-11-12 12:21:43 514
原创 Windows内核--调试内核源代码(1.5)
WRK编译并不比普通工程更复杂,反而更简单。编译大总管nmake,根据WRK makefile做编译,调用cl.exe, lib.exe和link.exe完成最终内核生成。
2022-11-10 12:44:36 1284
原创 Windows内核--Rtl字符串API “不同IRQL“(3.2)
RtlCopyUnicodeString和RtlEqualUnicodeString看起来同属于rtl支持字符串例程,实际上它们可运行的IRQL还是不同的。这也许很不可思议,通过源代码解开其中的秘密。
2022-11-08 23:28:01 295
原创 Windows内核--读懂源代码的特殊“标志“(1.4)
Windows内核代码严谨而富有逻辑,毕竟Kernel不是简单的Hello World,为了让代码更易于阅读和维护,加入了不少具有编译器特性和协助程序员的代码,同时对于错误和异常,内核必须合适处理,保证稳定和安全。
2022-11-07 21:57:21 738
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关注的人