摘要: 1.常用软键盘模式API API 场景:#Activity \ #AlertDialog \ #PopupWindow \ ... getWindow().setSoftInputMode(int flag {@link WindowManager.LayoutParams.#softInputMo 阅读全文
posted @ 2023-05-10 00:27 huansky 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 什么是依赖注入 ? 当我们编写 Web 后端代码的时候,会遇到这样的代码: class A { private IB _b; public A(IB b){ _b = b; } public void MethodA(){ _b.MethodB(); } } 如果你跟我第一次的感觉相同,可能也会存在 阅读全文
posted @ 2023-03-10 02:21 huansky 阅读(181) 评论(0) 推荐(1) 编辑
摘要: ksoftirqd是什么 ksoftirqd是运行在Linux的进程,专门处理系统的软中断的。在多核服务器上,每核都有一个ksoftirqd进程。我们经常看到ksoftirqd/0表示这是CPU0的软中断处理程序。 ringr buffer 环形缓冲器(ringr buffer),也称作圆形队列(c 阅读全文
posted @ 2022-06-19 16:46 huansky 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 1、解决网页文字无法选中或复制 我们在查看一些网页时会遇到不能复制的问题,或者鼠标无法选中文字,导致不能复制。 这时候我们按下键盘的F12,点击 console控制台,输入以下代码后回车即可 var eles = document.getElementsByTagName('*'); for (va 阅读全文
posted @ 2022-06-01 20:38 huansky 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 什么是并发编程,简单来说就是为了充分利用cpu,多个任务同时执行,快速完成任务。 并发编程相关的概念和技术看上非常零散,相关度也很低,想要学习好并发编程,可以从下面两方面入手:一是建立全景图,从细节“跳出来,看全景”,另一个是深挖细节,也就是“钻进去,看本质”。 其实不止是并发编程的学习,任何的知识 阅读全文
posted @ 2022-02-28 11:06 huansky 阅读(1112) 评论(0) 推荐(0) 编辑
摘要: 锁和被保护资源之间的关系 我们把一段需要互斥执行的代码称为临界区。线程在进入临界区之前,首先尝试加锁 lock(),如果成功,则进入临界区,此时我们称这个线程持有锁;否则呢就等待,直到持有锁的线程解锁;持有锁的线程执行完临界区的代码后,执行解锁 unlock()。这样理解本身没有问题,但却很容易让我 阅读全文
posted @ 2022-02-27 00:02 huansky 阅读(953) 评论(0) 推荐(0) 编辑
摘要: 《Java虚拟机规范》中曾试图定义一种“Java内存模型”(Java Memory Model,JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C和C++等)直接使用物理硬件和操作系统的内存模型。因此,由于不同平台 阅读全文
posted @ 2022-02-26 14:11 huansky 阅读(1174) 评论(0) 推荐(0) 编辑
摘要: 如果你细心观察的话,你会发现,不管是哪一门编程语言,并发类的知识都是在高级篇里。换句话说,这块知识点其实对于程序员来说,是比较进阶的知识。我自己这么多年学习过来,也确实觉得并发是比较难的,因为它会涉及到很多的底层知识,比如若你对操作系统相关的知识一无所知的话,那去理解一些原理就会费些力气。这是我们整 阅读全文
posted @ 2022-02-23 13:02 huansky 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 系统调用在内核中的入口都是sys_xxx,但其实Linux的系统调用都改为SYSCALL_DEFINE定义的。本文以socket系统调用为例来详解。 1 首先看一下SYSCALL_DEFINE的定义,如下: 1 #define SYSCALL_DEFINE0(name) asmlinkage lon 阅读全文
posted @ 2022-01-12 16:44 huansky 阅读(1552) 评论(0) 推荐(0) 编辑
摘要: 什么是伪共享 计算机系统中为了解决主内存与CPU运行速度的差距,在CPU与主内存之间添加了一级或者多级高速缓冲存储器(Cache),这个Cache一般是集成到CPU内部的,所以也叫 CPU Cache,如下图是两级cache结构: Cache内部是按行存储的,其中每一行称为一个cache行,cach 阅读全文
posted @ 2022-01-10 00:11 huansky 阅读(518) 评论(0) 推荐(0) 编辑
摘要: 1. 背景 在JDK 5之前Java语言是靠 synchronized 关键字保证同步的,这会导致有锁。锁机制存在以下问题: 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 一个线程持有锁会导致其它所有需要此锁的线程挂起。 如果一个优先级高的线程等待一个优先级低的线程 阅读全文
posted @ 2022-01-09 14:53 huansky 阅读(10039) 评论(1) 推荐(3) 编辑
摘要: LeakCanary 是一个简单方便的内存泄漏检测框架,做 android 的同学基本都收到过 LeakCanary 检测出来的内存泄漏。目前 LeakCanary 最新版本为 2.7 版本,并且采用 kotlin 重写了一遍。最近也是对 kotlin 有了一些了解后,才敢来分析 LeakCanar 阅读全文
posted @ 2021-12-11 14:22 huansky 阅读(1814) 评论(0) 推荐(0) 编辑
摘要: 一开始没打算分析 SubsamplingScaleImageView 这个开源的图片浏览器的,因为这个库在我们 App 中使用了,觉得自己对这个库还是比较熟悉的,结果某天再看看到源码介绍的时候,才发现自己对其了解并不够深入,所以这才打算再细细看看源码的实现,同时记录方便以后回顾。 那么 Subsam 阅读全文
posted @ 2021-11-28 20:30 huansky 阅读(3064) 评论(0) 推荐(1) 编辑
摘要: 最近在做产品需求的时候上线了一个新的产品需求,给用户多了一种新的排序排序规则,更加方便用户找到自己想要的东西。新版本发布后,QA 给我发了一个 线上崩溃 bug 链接,具体内容如下: 看到上面的链接,我有点懵逼了,就这排序还能给我搞出 bug 来?看到抛出的异常信息,也没有见过,于是直接百度搜索了。 阅读全文
posted @ 2021-11-14 22:33 huansky 阅读(517) 评论(0) 推荐(0) 编辑
摘要: 本文将阐述 Java 静态方法,实例方法之间的区别,并给出它们适用场景。虽然不知道对代码编写影响也不大,但是理解后,对你日后的代码设计是有好处的。 阅读全文
posted @ 2021-10-20 00:09 huansky 阅读(1366) 评论(0) 推荐(0) 编辑
摘要: 1. 概述 最近项目中用到了 DialogFragment,在使用 DialogFragment 的时候,遇到了很多问题,比如如何在显示的时候保证状态栏的颜色也不发生变化,如何设置自己的背景,不用系统背景等等。 那么 DialogFragment 是什么样的呢?DialogFragment 在 an 阅读全文
posted @ 2021-09-19 23:48 huansky 阅读(1525) 评论(0) 推荐(0) 编辑
摘要: 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 结合互联网的情况,自上而下地,非常简要的介绍一下各层的作用。 1.1 应用层 应用层(application-layer)的任务是通过应用进程间的交互 阅读全文
posted @ 2021-08-17 15:11 huansky 阅读(5501) 评论(0) 推荐(1) 编辑
摘要: 概述 前面算法系列文章有写过分治算法基本原理和实践,对于分治算法主要是理解递归的过程。二分法是分治算法的一种,相比分治算法会简单很多,因为少了递归的存在。 在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval sea 阅读全文
posted @ 2021-07-25 23:20 huansky 阅读(3243) 评论(0) 推荐(1) 编辑
摘要: Init 进程是 Linux 内核启动后创建的第一个用户进程,地位非常重要。Init 进程在初始化过程中会启动很多重要的守护进程,因此,了解 Init 进程的启动过程将有助于我们更好地理解 Android系统。 阅读全文
posted @ 2021-07-17 16:19 huansky 阅读(1060) 评论(0) 推荐(0) 编辑
摘要: 什么是 Binder ? Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一。Binder的设计采用了面向对象的思想,在Binder通信模型的四个角色里面;他们的代表都是“Binder”,这样,对于Binder通信的使用者而言,Server里面 阅读全文
posted @ 2021-07-14 00:08 huansky 阅读(2337) 评论(0) 推荐(0) 编辑