源码

java面试基础篇-List

Deadly 提交于 2020-04-05 18:00:41
一.ArrayList:   底层为数组实现,线程不安全,查询,修改快,增加删除慢, 数据结构:数组以0为下标依次连续进行存储   数组查询元素:根据下标查询就行   数组增加元素:如果需要给index为10的位置添加,则从index为11的位置开始右移 数组删除元素:如果需要删除index为10的位置,则从index为11的位置开始左移 线程: 如果判断线程安不安全只需要了解到是否进行加锁,如果没有加锁的话,多个线程操作同一个对象时就会出现线程不安全的情况. 源码: 1.new一个arraylist,调用add方法 2.查看add方法的源码可以看出,并没有任何加锁操作,这就是线程不安全的 ,这里首先会确认数组的容量,对其进行增加,并将新的元素加入到数组中 使用场景:查询 修改多 二.LikedList:   底层为链表实现,线程不安全,查询修改慢,增加删除快 数据结构:链表的每个元素都存储了下一个元素的地址,从而使一系列的随机的内存地址串在了一起,只要有足够的内存空间,就可以为链表分配内存   链表查:当同时读取所有元素时,链表的效率很高,读第一个,读第二个,以此类推。如果需要找到某个节点时,就需要遍历整个节点,才可以找到需要的元素   链表增加元素:只需要修改它前面的那个元素指针指向的地址即可   链表删除元素:只需要将前一个元素指针指向的地址更改即可 线程:

JDK源码学习笔记~Arrays.sort()

徘徊边缘 提交于 2020-04-05 16:49:49
最近在LeetCode上刷题,刚好遇到一个数组排序的问题,发现使用JDK自带的 Arrays.sort ()排序方法比大多数的常见排序算法快,所以赶紧跑来了解学习下 Arrays.sort ()底层究竟是如何实现排序的. 具体的JDK源码阅读环境的搭建可以参考我另一篇博客 JDK源码阅读环境搭建 (打个广告؏؏☝ᖗ乛◡乛ᖘ☝؏؏) (ps: 如果找不到tools包的小伙伴们,看看是不是当初安装jdk的时候将jdk以及jre的路径修改成同一个路径了,如果是同个路径的话,恭喜你,需要卸载重装JDK了,因为包被覆盖掉了,所以会报少包的错) 入口案例 package test.arrays; import java.util.Arrays; public class TestArrays { private static Random r = new Random(); public static void main(String[] args) { // 初始化数组 int[] arr = new int[286]; for (int i = 0; i < arr.length; i++) { arr[i] = r.nextInt(100); } // 入口 Arrays.sort(arr); } } Arrays.sort() /* * 排序方法。 * 请注意,所有公共“ sort

了解GO

谁都会走 提交于 2020-04-04 19:19:15
了解GO Go语言 Go是一种新的语言,一种并发的,带垃圾回收的、快速编译的语言 可以在一台计算机上用几秒钟的事件编译一个大型的Go程序 使依赖更容易分析,避免了大部分C风格include文件与库的开头 静态类型语言,类型系统没有层级 垃圾回收型语言,并为并发执行与通信提供了基本支持 Windows安装 根据电脑选择msi安装包,不要修改默认安装目录C:\GO\ 在cmd中输入Go,检查能否看到usage信息;输入 cd %GOROOT% ,看是否能进入Go安装目录;若都成功,说明安装成功。 Go命令 go build :主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包 go clean :用于移除当前源码包和关联源码包里面编译生成的文件。一般可以利用这个命令清除编译文件,然后github递交源码,在本机测试时这些编译文件都是和系统相关的,但是对于源码管理来说没必要。 go fmt :用于格式化写好的代码 go get :动态获取远程代码包 go install :这个命令在内部分为两步:第一步生成结果文件,第二步把编译好的结果移到$GOPATH/pkg 或者 $GOPATH/bin go test :自动读取*_test.go的文件,生成并运行测试用的可执行文件 go env :查看当前GO的环境变量 go list :列出当前全部安装的package go

硬核ArrayList源码分析,答应我每天看一遍好么

耗尽温柔 提交于 2020-04-04 19:03:20
一 前言 知识追寻者目前的系列都是基于jdk1.8进行学习分析;本篇源码分析会进行每步分析,当所有方法分析完最后还会做个大总结;如果不爱看源码分析步骤,只要面试最终结论的读者可以看看文末的总结就行了; 知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;) 二 ArrayList源码分析 2.2 空参构造方法源码分析 调试代码 public static void main(String[] args) { // 初始化长度为0 ArrayList list = new ArrayList();//断点 } 首先刚刚开始调到断点时,会默认显示ArrayList初始化长度为0; 其次进入构造方法 public ArrayList() { // elementData 是 Object[] ---> 故 Arraylist底层由对象数组实现 this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 可以看出就是一个DEFAULTCAPACITY_EMPTY_ELEMENTDATA 赋值给 elementData ; 先看看什么是DEFAULTCAPACITY_EMPTY_ELEMENTDATA,源码如下

jQuery attr() 源码解读

依然范特西╮ 提交于 2020-04-04 12:20:32
我们知道,$().attr()实质上是内部调用了jQuery.access方法,在调用时jQuery.attr作为回调传入。在通过种种判断(参看 jQuery.access()方法 )之后,取值和赋值最后调用了这个jQuery.attr方法。 所以,关键是看jQuery.attr这里怎么走了~~ 源码如下: attr: function( elem, name, value ) { var hooks, ret, nType = elem.nodeType; //如果elem不存在,或者是文本、注释、属性节点 // don't get/set attributes on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } // Fallback to prop when attributes are not supported if ( typeof elem.getAttribute === core_strundefined ) {//如果elem不支持getAttribute 比如document或者文档碎片 return jQuery.prop( elem, name, value );//调用jQuery.prop方法

实践指路明灯,源码剖析flink-metrics

自闭症网瘾萝莉.ら 提交于 2020-04-04 10:23:15
1. 通过上期的分享,我们对 Metrics 类库有了较深入的认识,并对指标监控的几个度量类型了如指掌。 本期,我们将走进当下最火的流式处理框架 flink 的源码,一同深入并学习一下别人家的代码。 2. 会当凌绝顶,一览众山小。先从全局了解个梗概,然后再采用剥洋葱的方式逐层去解密。 我本地的源码是 flink-1.8.1 版本,打开 源码,进入 flink-metrics 模块,发现很多以 flink-metrics-开头的系列模块。 映入眼帘的 flink-metrics 系列模块虽然很多,不用发愁。 其实主要分为指标监控基础核心模块( flink-metrics-core ),以及指标数据监控组件集成模块( flink-metrics-xxx )两大类。 2.1. flink-metrics-core 模块剖析。 开篇提到 Metrics 的几种度量类型,来看看 flink 是咋定义的? 打开指标监控基础核心模块 flink-metrics-core 看个梗概。 不出我们所料,flink 定义了 Metrics 监控中常见的几种度量规范(Meter、Gauge、Counter、Histogram),画个简易的类图再看的明白些。 不过为了便于管理和区分 Metric,于是就有了 MetricGroup 的定义,那么编码时可以直接与 MetricGroup 交互就可以啦。 到这

个人笔记:中建电商伤了我的心?终极逼迫离职手段

你离开我真会死。 提交于 2020-04-04 00:05:29
  基于如前文讲述的那些手段,在公司工作起来本来就特别憋屈。2020年春节疫情后上班不久我就把想离职的想法向公司表达了。公司肯定顺气自然的接受我离职。只是碍于一直没找到下一家工作,所以一直没离职。 终于在3月9日收到一家公司面试通过通知(待遇好不错20多k),接下来就是谈offer的事。由于新东家要人比较急,所以期望我10天内入职。因为我在中建电商这边所有的开发工作停了很久了,而且所熟悉的业务也以文档形式交接出去了。本以为可以快速离职。结果3月11日当天我问中建电商:却还是需要一个月时间才能离职: 已经做完各种交接,而且已经停止我开发任务好几个月了,但离职时:任需要交接一个月。(实质上我所有的都交接完了,后面我正式离职的时候也什么都没交接,当天提出当天就走人) ,提出一个月其实也合法,但是去这样就没法去新公司报到,所以没有选择离职。 就这样我未能去新公司报到,我选择继续在公司。没过几天(3月13日)L又来问我离职的事,我便答应最迟一个月后不管找没找到新工作都离职。 本以为我在中建电商的经历差不多到这里就结束了。结果,3月20日售后群里有个供应商需要技术支持(这个供应商和我见过好几次面了,工作上也打过很多次交道算是很熟悉了),于是他在qq群提出问题后,就立即微信我了(因为我之前告诉过供应商技术:现场有问题不能直接联系我处理问题,必须先在售后群里提问题,如果客服处理不了,会

2019 年终总结,240+篇,已分类整理

对着背影说爱祢 提交于 2020-04-04 00:03:24
code小生 一个专注大前端领域的技术平台 以下内容按照技术模块来划分,每个大的分类下文章顺序是按照难易程序来的,这样学习起来方便些。 2017 | 我在 5 个月时间里分享了 98 篇文章 2017 下半年总结 2018 文章合集 日常开发技术 仿网易考拉 个人中心 tableView弹簧动画 Android 仿网易云鲸云音效动效 Android-图片的选择,裁剪,压缩,适配高版本 【Android】线程/进程绑定指定CPU核 Android 官方架构组件(一)——Lifecycle Android 读写锁的应用,以及最佳的磁盘缓存设计 RxJava2+Retrofit2+RxLifecycle3+OkHttp3网络请求封装 Android 官方架构组件(二)——LiveData 玩转通讯录备份(JNI实战) Android 官方架构组件(三)——ViewModel ​迟来的 2018 年总结 Android 研发技术进阶之路 ​APP上架到各大应用市场技巧 Android 框架思考--工具类设计(Glide、Picasso切换实现) ​在安卓的道路上铿锵前行 ​Android Glide缓存策略分析 ​UiStatus 一个简单且强大的 Android Ui 视图状态控制库 ​Android性能优化:关于 内存泄露 的知识都在这里了!(文不如图,图不如表) ​无懈可击

使用IDEA搭建Java源码分析环境

≡放荡痞女 提交于 2020-04-03 21:11:57
系统环境 版本: JDK1.8.0_211 创建Java项目 使用IDEA新建Java项目; 将源码文件 src.zip 解压到新建项目的 src 目录下; 移除项目与 Java 安装目录下源码压缩文件的关联,在 Project Structure 的 SDKs 中创建一个新的 JDK ,仍然使用 Java 安装目录的 Classpath ,但要将 Sourecepath 中的 src.zip 修改为项目中的 source 目录。 在 Project Structure 的 Modules 的 Dependencies 中,将 Module SDK 改为新创建的 JDK ; 创建 Main 类,包含 main 方法即可。 运行Main类中main方法 运行发现以下问题: 系统资源不足,抛出 OutOfMemoryError ; 程序包 UNIXToolkit 和 FontConfigManager 不存在; 找不到 com.sun.tools.xx 等类。 解决方案 针对资源不足问题,在 Settings -> Build, Excution, Deployment -> Compiler 中修改 Build process heap size 为 1200 即可。 程序包不存在,需要在 OpenJDK 找到与当前版本对应的这两个 .java 文件,在项目的源代码目录下创建 sun

Kubenetes 1.13.5 集群源码安装

删除回忆录丶 提交于 2020-04-03 17:32:29
Kubenetes 1.13.5 集群源码安装 标签(空格分隔): k8s 2019年06月13日 本文截选https://k.i4t.com 更多k8s内容请持续关注https://i4t.com 一、K8s简介 在1.11安装的地方已经讲过了,简单的查看K8s原理可以通过 k8s 1.11源码安装 查看,或者通过https://k.i4t.com查看更深入的原理 二、K8s环境准备 本次安装版本 Kubernetes v1.13.5 (v1.13.4有kubectl cp的bug) CNI v0.7.5 Etcd v3.2.24 Calico v3.4 Docker CE 18.06.03 kernel 4.18.9-1 (不推荐使用内核5版本) CentOS Linux release 7.6.1810 (Core) K8s系统最好选择7.4-7.6 docker 提示 Centos7.4之前的版本安装docker会无法使用 overlay2 为docker的默认存储引擎。 关闭IPtables及NetworkManager systemctl disable --now firewalld NetworkManager setenforce 0 sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config