源码

[集合类]源码解析7(AbstractSequentialList抽象类和LinkedList类)

99封情书 提交于 2019-12-11 02:47:57
上一篇: [集合类]源码解析6(Queue接口、AbstractQueue抽象类、Deque接口) 文章目录 1. AbstractSequentialList 2. LinkedList 1) Node 2) 属性 3) 构造方法 4) 工具方法 5) List方法 (1) 添加方法 (2) 删除方法 (3) 修改方法 (4) 查找方法 6) Deque方法 (1) 添加方法 (2) 删除方法 (3) 查找方法 1. AbstractSequentialList 该抽象类翻译成中文是,顺序列表。这是相对RandomAccess标志接口而言的,我们在 [集合类] 源码解析1(Iterable、RandomAccess、Serializable、Cloneable) 一文中分析了RandomAccess,其表示容器支持随机访问,这类容器会优先使用索引进行操作。而不支持随机访问的容器,通常使用迭代器进行操作。 AbstractSequentialList中实现了List中的一些基本操作,都是基于迭代器的实现,下面我们看一下源码。 /** * 该类提供List接口的框架实现,以最小化由“顺序访问”数据存储(如链表)支持的实现该接口所需的工作。 * 对于随机访问数据(例如数组),应该优先使用AbstractList。 * * 这个类与AbstractList类相反,因为它另外实现了list

Linux下MYSQL 5.6 源码安装

让人想犯罪 __ 提交于 2019-12-11 01:37:09
Linux下MYSQL 5.6 源码安装 1 操作系统配置 1.1 RAID 配置 建议使用RAID 10,生产环境建议使用物理机,最好使用SSD。 RAID相关参数推荐设置如下: 1、Write Policy设置为WriteBack(WB). 2、Read Policy设置为ReadAdaptive或者normal,数据库服务器不建议设置ReadAhead. 3、IO Policy设置为Direct . 1.2 最大打开文件数|进程数 # vim /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 1.3 关闭NUMA 1、可以在bios中关闭(物理机推荐使用这种方式进行修改); 2、/etc/grub.conf的kernel行最后添加numa=off和/boot/grub/grub.conf 2个文件都要改,最后添加numa=off。 1.4 内核参数优化 # vim /etc/sysctl.conf fs.file-max = 65536 vm.min_free_kbytes = 1048576 vm.swappiness = 10 vm.dirty_ratio = 10 vm.vfs_cache_pressure=150

Vslam方案+源码,轻松搞定视觉slam

两盒软妹~` 提交于 2019-12-11 00:52:53
原创: 涛涛CV 涛涛CV 今天 关注 涛涛CV ,设 为 星标 ,更新 不 错过 ------------------------------------------- VSLAM方案 目前基于视觉的SLAM技术有多种组合形式(见下表) 方案 特点 TOF 成本高,分辨率较低,对环境不敏感,但对距离敏感 单目+结构光 处理量小,精度不高,可靠性不够高,不合适室外 双目 成本最低,应用广泛,对算法性能依赖度大,算法复杂度高,处理芯片需要很高的计算性能。受光照,物体纹理性质影响 双目+IMU 能定位、测速,输出姿态信息等优点, 缺点是误差随着时间迅速积累增长 双目+结构光 算法难度高,对环境要求也高。计算量大,需要FPGA或强CPU 激光雷达 可视范围广,缺点是性价比低,低成本的分辨率不高 最好使用 VSLAM+IMU 进行融合,可以提高精度上去,适用于实际应用中机器人的导航。 稀疏法: 2 ORB-SLAM2:(排名39) 支持单目,双目,RGB-D相机 没在维护 (构建出的地图是稀疏点云图、旋转时比较容易丢帧、可能会精度不高,或者产生累积误差,漂移) 误差:1.15%,0.0027 实时性:0.06s/2 cores/ >3.5GHz 开发环境:C/C++ https://github.com/raulmur/ORB_SLAM2 变体:https://github.com

当我们追踪源码时,要追踪到什么程度?

别等时光非礼了梦想. 提交于 2019-12-10 23:48:08
源码追踪,是所有开发工程师要迈出的一道门槛。不会源码追踪,或者不习惯于研究出色开源组件的源码,注定会限制自己的成长,也无法广泛借鉴更多的编程技巧和工程思想。不会追踪源码,就像是不会识字的文盲,没办法在海量的知识海洋中遨游与成长。 前两天看到一篇知乎热文:《 你都有哪些面试时被虐的经历? 》,以极其幽默的方式描述了在技术上被蹂躏的过程。究其原因,毫无疑问是基础不牢固。但为什么会基础不牢固?无非就是在研究、钻研技术时,没有打破砂锅问到底。但我们可以进一步细问,什么叫做打破砂锅问到底?要问到什么程度才叫做到底了? 这几乎就等价于,当你追踪源码时,到底要追踪到什么程度?是追踪到你当前所用框架的实现工具层?还是要追踪到系统API调用层?又或是追踪到你语言本身的实现层次?哪里是个尽头?应该到哪里才是尽头? 回顾上面那篇知乎热文,其实有很多可以琢磨的细节。如果完全以虚心学习的态度来讲,面对拷问细节的面试官,当然是要承认自己实力的不足,知耻而后勇地努力学习。但如果从另一个角度去思考,会体现出一些非常无奈的事实:我自己的工作中就用到这个程度,为什么要问到如此细节?好不容易看了一下这个feature的实现,知道调用了系统底层的某个函数,你偏偏要问,那个系统函数是如何实现的。好不容易知道那个系统函数的实现思路,你非要问,在语言层面是什么特性保证了该实现的合理性。 如此种种,到底何时是个头

基于Java实现hello/hi简单网络聊天程序

a 夏天 提交于 2019-12-10 22:15:52
目录 Socket简要阐述 Socket的概念 Socket原理 hello/hi的简单网络聊天程序实现 服务器端 客户端 程序执行结果 跟踪分析调用栈 & Linux API对比 创建ServerSocket 调用栈图示 源码分析 Socket绑定 调用栈图示 源码分析 Socket监听 调用栈图示 源码分析 Socket Accept 调用栈图示 源码分析 Java Socekt API与Linux Socket API 参考链接 Socket简要阐述 Socket的概念 Socket的英文原义是“孔”或“插座”。 在网络编程中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个Socket。 Socket套接字是通信的基石,是支持 TCP/IP协议 的网络通信的基本操作单元。 它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。 Socket本质是 编程接口(API) ,对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。 HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 Socket原理 Socket实质上提供了进程通信的端点。进程通信之前

Android APK反编译就这么简单

混江龙づ霸主 提交于 2019-12-10 18:30:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 使用工具: CSDN上下载地址: apktool (资源文件获取) 下载 dex2jar(源码文件获取) 下载 jd-gui (源码查看) 下载 工具介绍: apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar 作用:将apk反编译成java源码(classes.dex转化成jar文件) jd-gui 作用:查看APK中classes.dex转化成出的jar文件,即源码文件 二、Apk 反编译 得到Java源代码 下载上述工具中的dex2jar和 jd-gui ,解压 将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的 classes.dex放到之前解压出来的工具dex2jar-0.0.9.15 文件夹内, 在命令行下定位到dex2jar.bat所在目录,输入dex2jar.bat classes.dex,效果如下: 在改目录下会生成一个 classes_dex2jar.jar的文件,然后打开工具jd-gui文件夹里的jd-gui.exe,之后用该工具打开之前生成的classes_dex2jar.jar文件,便可以看到源码了,效果如下: 被混淆过的效果图

Glide 4.7.1源码分析--启动加载 into(view)

霸气de小男生 提交于 2019-12-10 17:47:12
Glide源码分析 – 启动图片加载流程 // 在 RequestBuilder.into()之前必须调用load()系列方法,设置model // 重载的一系列into()方法最终都调用 /* private <Y extends Target<TranscodeType>> Y into( @NonNull Y target, @Nullable RequestListener<TranscodeType> targetListener, @NonNull RequestOptions options) */ Glide . with ( context ) . load ( url ) . apply ( requestOptions ) . into ( iv ) ; 在这里分析 参数是 imageView的 RequestBuilder.into(imageview) ① public ViewTarget<ImageView, TranscodeType> into(@NonNull ImageView view) public ViewTarget < ImageView , TranscodeType > into ( @NonNull ImageView view ) { Util . assertMainThread ( ) ; Preconditions .

java并发源码:volatile

删除回忆录丶 提交于 2019-12-10 17:07:27
java并发源码:volatile volatile的定义: ​ java编程语言运行线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排它锁单独获得这个变量。如果一个变量被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。(可见性) volatile的作用: 1.保证变量在多线程中的可见性 ​ 为了提高处理速度,处理器不直接和内存进行通信,而是先将内存中的数据读到工作内存中后再进行操作,但操作完不知道何时会回写到内存中。 ​ 如果对有volatile声明的变量进行写操作,JVM会向处理器发送Lock前缀指令,将这个变量的值,回写到主内存中。 ​ 为了保证其它线程中的缓存一致,每个处理器经过嗅探在总线上传播的数据来检查自己缓存的值是否过期,如果发现自己缓存行对应的内存地址被修改,就会将当前处理器的缓存行置为无效。当处理器再次进行修改操作时,会重新从主内存中读取数据。 实现原则: ​ 1.Lock前缀指令会引起处理器缓存回写到内存中。 ​ 2.一个处理器的缓存回写到内存中会导致其它处理器的缓存无效。 public class VolatileTest { static volatile int x = 0 ; public static void increase ( ) { x ++ ; } public static void

element-ui 2.13.0 源码

孤街醉人 提交于 2019-12-10 16:01:09
目录 - .github - build - examples - packages - src - test - types - .babelrc - .eslintignore - .eslintrc - .gitattributes - .gitignore - .travis.yml - components.json - Makefile - package.json - yarn.lock - 其他(更新日志、svg图标、常见问题、声明、使用说明) 来源: https://www.cnblogs.com/qq3279338858/p/12016929.html

追溯源码解决android疑难问题1--Viewpager之notifyDataSetChanged

折月煮酒 提交于 2019-12-10 15:57:56
最近项目结束,搞了一次代码分享。其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅。整理出来,分享给大家。 建议使用自己编译的android os和虚拟机,这样就可以调试android系统中的任何组件。简单说来,深入android源码,去寻找解决问题的答。这事儿说起来简单,实际做起来还是有些难度的。我也曾经尝试着去看过,没看一会儿就晕了。 所以还是有针对性的去看源码,效率会高一些。 废话不多说,先看第一个示例。 Viewpager在调用notifyDataSetChanged()时,界面无刷新。 相信很多做过Viewpager的同学肯定遇到过这个问题,这个是bug还是android就是如此设计的,我们不做讨论。总之,它确实影响我们功能的实现了。 可能不少同学选择为Viewpager重新设置一遍适配器adapter,达到刷新的目的。但是这种方法在大多数情况下,是有问题的。 追踪源代码: 为什么调用数据更新的方法,Viewpager却没有更新呢,我们跟进该方法的源代码看一下。 首先查看适配器调用的super.notifyDataSetChanged(),该方法调到抽象基类PagerAdapter.notifyDataSetChanged()中: [java] view plain copy /** * This method should be called by