- 博客(24)
- 问答 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JVM学习笔记
java内存区域 java内存区域划分为:java堆、方法区(以及运行时常量池)、本地方法栈、虚拟机栈、程序计数器线程共享的区域是:java堆、方法区;线程隔离的是:本地方法栈、虚拟机栈、程序计数器。异常:程序计数器既不抛出StackOverFlow也不抛出OutOfMemoryError;java堆抛出OutOfMemory;本地方法栈和虚拟机栈两者都抛出;方法区抛出OutOfMemo
2018-01-02 20:15:36
189
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 HashMap源码阅读笔记
39-45行 注释:主要介绍了HashMap和HashTable的区别,即HashMap允许null作为键、值,而且HashMap不是线程安全的。并且HashMap中的元素不是有序的,特别的,也不保证随着时间推移,这个map中存储的顺序不发生改变。 解析:hashmap是线程不安全的,键、值都允许null的存在,map中的元素不保证有序,随着时间推移可能还会发生变化。 47-54行 注
2017-12-23 23:34:07
328
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Arrays.sort源码分析
2017.11.30 开始对JDK源码的阅读,在算法书上看到提及过这个,而且自己平时偷懒简单排一排的时候,也是使用这个方法进行排序,索性将它看上一看。 /** * The minimum array length below which a parallel sorting * algorithm will not further partition the sorting task. U
2017-11-30 18:20:15
1531
原创 Hadoop启蒙demo——单词统计WordCount(Intellij IDEA版)
写在代码之前 在网上搜了很多都说要打包jar,或者需要在环境变量中写入,比较繁琐。但是笔者写的这个代码也是能直接跑的,正常输出结果。主要是要有下面这行代码,会在控制台打印出运行结果并在完成后退出,这样看着比较直观一点。 System.exit(job.waitForCompletion(true) ? 0 : 1); Mapper类 import org.apache.hadoop....
2018-06-04 15:42:59
635
原创 Hadoop初窥学习笔记
Hadoop核心组件 Hive 功能:用于将SQL语句转化为可执行的Hadoop任务,降低了使用门槛 Hbase 类型:存储结构化数据的分布式数据库 区别:放弃传统关系型数据库事务的特性,追求更高的扩展。并且提供对数据的随机读写和实时的访问,实现对表数据的读写功能 Zookeeper 功能:提供分布式一致性 HDFS 概念:Hadoop的文件系统,将所有文件以块的形式存储...
2018-05-30 18:25:27
214
原创 网络编程学习
BIO NIO AIO BIO(同步阻塞) Server端代码并启动 Client端代码 问题总结 NIO(New I/O 或者称之为 Non-Block I/O) 快捷键 BIO NIO AIO BIO(同步阻塞) 传统的网络编程模型中采用C/S模型,即客户端/服务端模型。这时候通常采用的是BIO(Blocking Input Output)即同步阻塞的。 优...
2018-04-30 22:57:19
259
原创 Java并发编程学习笔记(一)
第一部分:基础知识 第三章:对象的共享 3.2 发布与溢出 发布的定义:使得对象能够在当前作用域之外的代码中使用。 发布的注意事项:(1)发布对象可能会破坏封装性 (2)难以维持不变性,在构造完成前发布对象则会破坏线程安全性(引用逃逸) (3)发布是连锁的。即比如我发布了A对象,假设A对象中能够通过对非私有变量的引用到达B对象,那么B对象也会被发布。 (4)不要在构造方法中使
2018-02-07 20:28:41
182
原创 MySQL查询缓存
查询缓存 优点:(1)对于某些频繁出现的查询语句,可以减少I/O。缺点:(1)查询缓存需要占用一定的内存。(2)每次查询执行前都要先检查缓存,故不一定是有利的。缓存未命中的原因:(1)查询不在缓存中 (2)缓存失效 (3) 查询中包含不确定的函数,比如current_date。因此如果查询希望使用缓存,就直接使用当时时间的字面量,比如‘2018-1-29’这种即可。缓存失效:(1)在In
2018-01-29 17:20:32
330
原创 常用设计模式学习
单例模式:这个肯定是用的最多的,分为两种:饿汉/懒汉(饱汉)式。这个模式通常用于针对那些创建非常消耗资源的类,在一个容器中就只创建一个作为全局变量,在Spring容器管理中默认就是采用的单例模式。 下面简单介绍一下,饿汉式顾名思义,就是饥不择食了,不管有没有需要用这个对象的,先把它给创建好了再说;而懒汉呢,与之相反,只有在外部主动调用时,这个对象不存在的情况下才创建,如果已经有这个这个实例对象,
2018-01-16 20:51:57
194
原创 操作系统查漏补缺
进程的描述与控制 进程的描述 定义:程序+PCB(进程控制块)+数据集合,是系统资源分配的最小单位。目的:为了使程序并发执行,并能对其加以描述和控制。特征:动态性、并发性、独立性、异步性。三种基本状态:就绪态、运行态、阻塞态 进程的同步 同步方式:临界区、互斥区、信号量、事件、管程临界区:在每个进程中访问临界资源的代码称为临界区;在进入临
2018-01-15 16:34:15
229
原创 计算机网络查漏补缺
这篇文章相对来说就是自己复习总结了,可能知识点就不是特别成体系,想到哪补哪吧。 协议相关 应用层协议 HTTP/HTTPS协议:前者占用的80端口,后者是443端口;后者采用SSL(安全套接字层),以及加密算法/证书来保护安全性,相对来说在传输上花费的时间更长。SSL能用于所有基于TCP的应用上,因此二者都采用了TCP作为支撑。 SMTP协议:(1)端口号:25
2018-01-14 20:49:28
312
原创 java线程安全的实现方法总结学习
java语言中的线程安全 将安全程度由强到弱排序:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立,共五种情况不可变:典型的就是String类,这个就不多赘言。还有枚举类,以及Number类的部分子类,如Long/Double/BigInteger等大数类型。绝对线程安全:不论运行时环境如何,调用者都不用采取额外的同步措施。相对线程安全:这是大家平常所提到的“线程安全”的级别,如集
2018-01-14 16:21:52
821
原创 ConcurrentHashMap源码阅读笔记(JUC)
76-85行 注释:这里主要讲的是同为线程安全的Hash,HashTable和ConcurrentHashMap的区别。ConcurrentHashMap(下文用本类指代)虽然是线程安全的,但是检索操作(比如get,是不保证加以锁的),并且本类没有任何操作用于锁住整个类实例的表。本类并不是以同步锁(synchronize)来保证线程安全的,而是它本身操作的性质(CAS无锁化同步)。 87
2018-01-12 10:31:42
238
原创 JVM学习笔记(四)——类文件结构、字节码指令
Class类文件的结构 Class文件格式:由无符号数和表组成。无符号数属于基本数据类型,以u1/u2/u4/u8代表1、2、4、8个字节的无符号数。这个数可以用来描述数字、索引引用,数量之或者UTF-8编码的字符串值表:和广义表的定义有点像,它的元素可以是多个无符号数或者是其他表。前四个字节为魔数(java是CAFEBABE 咖啡宝贝)、副版本号、主版本号。 常量池 接
2018-01-09 21:00:04
217
原创 MySQL学习笔记
零散知识点 ACID:原子性、一致性、隔离性、持久性事务的隔离级别,四种:(1)未提交读(可能出现脏读);(2)提交读(可能出现不可重复读);(3)可重复读(可能出现幻读,但mysql的innodb通过mvcc解决了这个问题);(4)可串行化读(行行加锁,太重了,一般不用) 索引篇 索引主要分为B+树索引和Hash索引。索引的最左匹配原则:比如设定一个索引为(col1,col
2018-01-08 20:07:03
923
原创 JVM学习笔记(三)——虚拟机字节码执行引擎
运行时栈结构 栈帧是虚拟机进行方法 调用和方法执行的数据结构。它是虚拟机栈的栈中元素。主要由以下四种信息:(1)局部变量表 (2)操作数栈 (3)动态链接 (4)方法返回地址栈帧的大小是在编译时就可以确定的,比如需要多大的局部变量表,操作数栈有多深等等。因此,一个栈帧需要分配多少内存,只受到虚拟机的具体实现影响。符合平时运行逻辑一样,只有栈顶的栈帧元素才有效果,这个被称为当前栈帧,与当
2018-01-07 20:40:35
237
原创 JVM学习笔记(二)——虚拟机类加载机制
类加载的时机 类加载的生命周期: 加载验证、准备、解析(统称为连接),其中解析过程不像其他过程那样按部就班,它可以在初始化阶段之后再开始,也就是动态分派的基础,动态绑定。初始化使用卸载 什么时候开始类加载,共只有五种情况 遇到new,getstatic,putstatic,invokestatic四条字节码指令时。从字面意义上我们就很好理解:(1)new 代表最
2018-01-06 15:45:13
240
原创 算法-字符串
字符串排序 一、键索引计数法 时间复杂度:线性时间,排序N个键为0-R-1需要11N+4R+1次。因为不是继续比较的排序。计数排序嘛,分配型的排序方法,以空间换时间。
2017-12-22 21:44:40
197
原创 JAVA基础API
1、String subString()方法返回的子字符串和原字符串的value[]数组一样,并且多了偏移量和字符串长度,这也是为什么substring()方法能够在常数时间完成的原因。接上,由于substring()返回的实际是原字符串,所以s==s.substring(0)---->true,因为两者引用相同,重载的方法包括从起始索引开始(如果指定结束索引,是[起始索引,结束索引)即
2017-12-22 20:45:16
245
原创 数据结构知识点总结
一、树 1、树(森林)和二叉树可以相互转化,规则是“左孩子右兄弟”,即当前节点的左孩子在由二叉树转化为树的过程中,左孩子还是当前节点的左孩子,而右节点会变成当前节点的兄弟。 2、设二叉树度为0的节点有N0个,度为2的节点为N2,则N2=N0+1 二、图 1、无向图的数据结构是邻接多重表,有向图的数据结构是十字链表。二者都可以使用邻接表 2、使得图从偏序到全序的遍历序列即拓扑排序,拓扑排序
2017-12-20 17:25:01
981
转载 JAVA的位运算符<<
作者:傻傻傻傻 链接:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8 来源:牛客网 在java中,对于1
2017-12-14 11:45:00
236
原创 数据结构-图的分析
1、有向图的强连通分量的计算:Kosaraju算法 时间复杂度:O(V+E),对于有向图的强连通性查询可以在常数时间内完成。 步骤:1、对图G进行转置(反向图)得到图Gr 2、对Gr求得逆反序,即Gr的拓扑序列 3、从Gr的拓扑序列开始,进行深度优先搜索,得到的搜索树即强联通分量。 说实话,这个算法从代码量上是非常简洁的,仅仅就是从遍历所有节点(0,1....v)变成了按照拓
2017-12-13 21:00:09
344
原创 JAVA语言特性笔记
1、JAVA支持的多态性质主要是为两种:静态多分派和动态单分派。 静态多分派在JAVA中的表现形式即:重载。主要由静态方法和私有方法构成(还有实例构造方法、父类方法)。他们的引用在类加载之初就已经被确定了。一个是类级别的,一个是私有方法,private访问限定了它不能被子类访问并覆写。 动态单分派的表现形式为:覆写(Override) 两者的主要区别在于一个是编译期绑定,
2017-12-12 23:44:55
227
原创 二叉树遍历
二叉树遍历分为:深度优先遍历和广度优先遍历,在课堂上主要提及到的先序遍历,中序遍历和后序遍历属于深度优先遍历,广度优先遍历的主要实现是层级遍历。 二叉树本身属于图的一种,定义为连通的无环图,刚开始学习《算法4》这本书的时候还一直在翻目录,怎么没有提到重要的二叉树先序遍历,中序遍历和后序遍历呢?后来才拍拍脑门觉得自己太蠢了,写的深度优先和广度优先不就是为图设计的么,二叉树又本身就是图的一种。 二
2017-12-09 23:31:36
160
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人