自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 高并发和ThreadLocal以及内存泄漏

并发编程首先感谢https://blog.csdn.net/iter_zc/article/details/39546405这个系列的作者。之前接触过高并发,但是都是在断断续续的接触和学习,没有一个结构化的学习。我的博文就是在看了他的讲解之后自己理解的。如果我写的不够好,大家可以去看一下大神写的,希望大家都可以提升自己的技术。1. 并发编程的场景java里面涉及到并发问题大多是多线程的问题,...

2018-12-04 15:17:37 574

原创 TCP、UDP协议

(三次握手和四次挥手讲得好的文章) https://www.cnblogs.com/zmlctt/p/3690998.html 前言:网络世界很大,里面大大小小的协议很多。因为我们不是专业的网络人员,所以我们没有必要把每个协议都搞清楚。我认为对于不同的协议我们需要了解的深度也不同。比如ARP、RARP、IMCP,这些协议其实我们只需要知道他是干什么的基本上就足够了。但是对于TCP这种协...

2018-12-01 14:41:41 232

原创 TLS/SSL

 1.HTTPS和SSL/TSL的关系通常我们在浏览器输入https:开头的网址并且输入回车的时候,在很短的时间浏览器会和服务器进行大量的对话从而确定下来实际对话的时候使用加密的密钥以及摘要算法等信息。这个过程就成为TLS/SSL握手。下面也会介绍一下这个过程。2.TSL和SSL的关系这两种协议实际上是一种协议的不同叫法罢了。TSL协议上世纪90年代被提出,后来发展到3.0版本。1...

2018-11-28 17:59:28 312

原创 二叉树

本文里面的树的深度和高度的基数为1,但是有的地方是以0为基数的。两者都可以,重要是理解这种结构。#1.二叉树的定义二叉树指的是每个树最多只能有两个子树的树形结构,也可以说成每个节点最多可以有两个子节点的树形结构。#2.二叉树的基本性质深度为n的节点的数目最多为2n−12^ {n-1}2n−1如果一棵树的深度为n,那么总的节点个数最多为2n+12^n+12n+1如果一棵树的总结点的数目...

2019-01-10 20:07:05 205

原创 树形结构基本概念

树形结构 前面说过的数据结构都属于线性数据结构,也就是数据都是在同一个线性结构里面存储的。树形结构指的就是存储数据的结构为树形。类似于下面的图,因为看起来很像一颗倒着的树,所以称为树形结构。基本概念:树:由于上面的整个图行看起来就像一颗倒过来的树,所以上面的结构又称为树形结构。节点:上面的树形结构是由若干个节点和节点之间连接的路径连起来构成的结构,ABCDEFG都是一个单独的节...

2019-01-08 20:14:02 3464

原创 jsonp和java支持jsonp请求

jsonp的作用,大家都知道jsonp是用来跨域的,那么什么是跨域呢?跨域指的是不同源下面的脚本不能调用其他源下面的对象。这受制于浏览器的同源策略。1.同源策略以及源的定义同源策略指的就是不同源的客户端脚本在没有授权的情况下无法访问其他源下面的资源,比如你再baidu.com下面使用ajax请求qq.com的数据会报错的。因为两个网站是不同源的。源指的就是域名、协议和端口号。只有在三者...

2019-01-07 20:39:26 2057

原创 线性数据结构

1.数组数组应该是数据结构里面最简单的数据结构了。数组是不可变的。在创建数组的时候就必须指定数组的大小。初始化数组的三种方式int[] temp = new int[5];int[] temp1= {14,5,6};int[] temp2= new int[]{1,2,3,4,5,6,7,22};java里面的ArrayList和Vector底层就是以数组形式实现的。两者的区别是Ar...

2019-01-03 21:15:56 1332

原创 Mysql里面的时间类型

 四种mysql数据类型mysql java 格式 date Date 2018-10-10 time Time 18:20:21 datetime TimeStamp 2018-10-10 18:20:21 timestamp TimeStamp 2018-10-10 18:20:21 dat...

2018-12-28 20:19:22 159

原创 zookeeper的安装

下面的目录的路径大家可以自由选择,下面写的路径都是我使用的路径,也不一定标准。https://mirrors.cnnic.cn/apache/zookeeper/ 点击这个网站下载一个zookeeper 我下载的是zookeeper-3.4.13.tar.gz版本,最好下载稳定版本 beta版本一般还没有经过大规模的测试,可能还存在一定的缺陷。cd /usr 切换到这个目录...

2018-12-25 10:52:14 132

原创 Reactor模式-多线程

1.流程图可以看出 相比单线程的reactor模式来说,多线程的模式使用了线程池来管理多个线程来处理各个socket连接的读写请求,而比较简单的连接请求还是交给一个主线程来处理。只有发生读写时间的时候才会分发给各个线程来处理读写逻辑。2.什么情况下socket是可读和可写的引用的是https://blog.csdn.net/nosix/article/details/77484562这篇文...

2018-12-22 20:13:33 628

原创 Reactor经典模式 -单线程

1.流程图client 指的是连接的客户端reactor指的是总的调度类 监听到符合监听条件的selectionkey会调用dispatch分发出去acceptor指的是管理处理连接状态的组件黄色的部分分别代表读、解码、处理、编码、发送。这部分可以用handler来代表,处理的是读写的操作,也是整个流程里面最耗时的操作。单线程模式主要代表的是所有的操作都是在一个线程里面完成。下面是各...

2018-12-20 19:21:15 461

原创 四个Channel的讲解

1.FileChannel1.读的例子 public static void read(String fileName) throws IOException { //第一种获取FileChannel的方法 /* RandomAccessFile randomAccessFile = new RandomAccessFile(fileName, "rw"); ...

2018-12-19 11:15:21 17317

原创 NIO里面的Selector

1.什么是selectorselector指的是java里面的一个组件,这个组件可以检测多个NIO里面的channel组件。他可以监测一众channel组件是否有读、写、连接或者接收就绪的状态。这就需要我们在这个selector注册这个channel并且告知selector该检测自己的什么事件。selector主要是在网络编程里面使用的比较多,他可以使用有限的Thread来管理多个网络连接。...

2018-12-18 10:10:23 197

原创 使用Socket进行通信的javademo

代码在JDK1.7一上的环境下可以调用,因为使用了ARM模块关闭资源1.服务端 public static void main(String[] args) throws IOException { //创建socket服务器 绑定的端口号是5048 try ( ServerSocket server=new ServerSocket(5048); ...

2018-12-16 17:21:44 208

原创 写代码经常犯的错误

1.关于使用BigDecimal进行连续加减 BigDecimal bigDecimal1 = new BigDecimal(0.02); BigDecimal bigDecimal = new BigDecimal("0.02"); bigDecimal.add(new BigDecimal("2")); bigDecimal.ad...

2018-12-16 10:22:49 1214

原创 NIO里面的Buffer和Channel

#1.NIO和IO的区别首先传统的IO是面向流的。而NIO是面向缓冲区的。当使用传统IO读取数据的时候,如果数据没有准备好那么线程将会一直阻塞。但是如果使用NIO进行读取时,如果数据没有准备好,那么会直接返回到缓冲区里面已经存在的数据,不会让线程发生阻塞。另外由于NIO是面向缓冲区的,所以通过缓冲区可以读取缓冲区里面任意位置的数据。很多框架比如Netty底层就是使用了NIO的方式进行读取。#2...

2018-12-15 09:12:12 317

原创 垃圾回收器以及分类

1.垃圾回收器的各种组合:因为java虚拟机规范对垃圾回收器的实现没有具体的规范,所以不同的厂商实现了不同的回收器。下面一张图是各种不同的垃圾回收器以及可以实现的组合。有连线的代表两个垃圾回收器可以在年轻代和老年代互相组合。2.serial收集器从名字看出这是一个单线程收集器。他是JDK1.3之前新生代的回收器的唯一选择。它代表这是一个单线程的的垃圾回收器。在单线程的情况下,这个垃圾回收...

2018-12-14 11:13:03 713

原创 Linux五种IO模型

1.什么是io流当不同的介质在进行数据传输的时候就需要使用io流,io流是把数据以一种无结构的字符序列以流的形式在不同的介质之间进行传递。注意,数据源可以是文件也可以是其他的介质比如数据库等。数据的目的地可以是程序也可以是任何需要读取数据的地方。2.同步、异步、阻塞、非阻塞的区别这四个词的含义是不同的。他们可以互相组合,就是理论上来说至少有四种io流的实现。同步和异步:这两个词是针对被调用...

2018-12-12 17:21:31 166

原创 并发和并行的区别

1.时间片一个单核CPU的电脑上,我们可以同时听歌和执行代码。我么宏观上的感觉是歌曲的播放和代码的执行是同时发生的。但是实际上并不是。这一切的假象产生的原因就是CPU强大的运算执行能力和合理的时间片分配。一个CPU同一个时间点只能执行一个任务,它会给不同的程序分配不同的时间片,当时间过去之后,CPU就去执行其他的任务了。就是说其实单核CPU的情况下,我们听歌和执行代码其实也是也是有先后顺序的,...

2018-12-11 10:56:32 137

原创 JAVA里面四种引用以及如何使用软引用构建高速缓存

1. 四种缓存

2018-12-10 19:50:53 1328

原创 内存分配规则和生存状态

1.优先分配到eden区我们在方法里面显示的创建一个对象,它是会被优先分配到eden区。2.大对象直接进入到年老代-XX:PretenureSizeThreshold  这个参数可以设置超过多大内存空间的对象直接直接进入老年代,默认值为0。就是不论对象多大,都直接在eden区分配。3.长期存活的对象进入到老年代虚拟机给每个对象定义了一个年龄计数器,每次在survivor区迁移一...

2018-12-09 18:18:58 279

原创 垃圾回收算法

现在主要的垃圾回收算法主要有四种垃圾算法1.标记-清除算法这个垃圾回收算法就是回收的时候只对标记出来已经没有用的对象进行回首之后回收之后并不执行任何操作,这个垃圾回收算法大家可以看出来有一个很大的问题就是会产生大量的内存碎片。2.复制算法复制算法的核心就是实现把内存分为两块区域,每次分配内存空间的时候只是从其中的一块分配,另一块还是空闲的,垃圾回收之后把还处于存活状态的对象直接复制到另一块...

2018-12-09 11:37:01 153

原创 垃圾回收必要性以及判断对象是否可回收

#1.为什么需要垃圾回收之前的文章讲过java的内存模型。java最主要的两大区域就是堆和栈,而这两个区域大小不是无限大的,我们可以在启动的时候通过xmx xms xmn 这些参数来指定大小。当我们在程序里面不停地创建对象,运行方法,新开线程就会不断地要求JVM给我们分配对应的内存,如果我们一直不去收集那些没用的对象,就会把内存撑爆,导致程序崩溃。但是我们再写代码的时候并没有刻意的指明,我们的程...

2018-12-09 10:39:38 222

转载 转载

转 JMM——volatile与内存屏障 2016年03月30日 13:08:08 Oo此岸花开oO 阅读数:6192 <span class="tags-box artic-tag-box"> <sp...

2018-12-08 15:36:57 131

原创 内存缓冲和无效队列

存储缓冲区和无效队列还是为了更好的利用CPU的高执行率。首先印出来一个概念:缓存行(cacheline),数据在缓存里面不是杂乱无章的存储的,它是以缓存行的形式存储的。缓存行的大小就是CPU一次处理的最大数据的大小。CPU读取和修改数据都是直接对缓存行进行操作的,高速缓存里面都是有一个个的缓存行组成的。在此特别感谢http://www.wowotech.net/kernel_synchroni...

2018-12-08 15:09:01 1751

原创 重排序

#计算机很复杂,下面讲的也只是一些你概念的东西。讲的并不深,如果想完全得弄明白整个计算机跟JVM结合以及程序执行的关系,大家可以在网上继续深究。1.什么是重排序?尽管现在为了尽快提升系统的运行效率而在CPU的前面加了多级缓存来减少CPU等待数据存取的时间。但是依然无法充分的运行CPU快速的运算能力。当我们在写java语言的代码的时候,首先编译器会在编译的时候进行一次重排序,然后处理器在执行的时...

2018-12-07 19:33:13 345

原创 内存可见性和happens-before原则

java-内存可见性1.什么是内存可见性?首先我们看下面这张图java的运行机制来说,会为每个线程创建一个栈,线程运行的时候就会优先读取自己的工作内存内部的数据。然后在线程执行之后把数据在写会到主内存里面。但是多线程的条件下,可能会出现上一个线程还没有执行完的情况下,这个线程就要操作这个数据了,这个时候就会出现本线程去内存读到的数据和上一个线程内部的数据是不一致的。那么该如何保证一个数据在...

2018-12-06 22:54:59 312

原创 缓存一致性协议MESI和MOESI

下面的看法只是本人阅读了一些简单的文献,自己用自己能理解的方式写出来的文章,如果有不对的希望大家指出。我了解这些比较底层的东西只是为了更好的理解JAVA多线程的一些知识,对底层的一些具体实现原理并没有深究(深究也学不会,呃呃)。1.寄存器、缓存、内存下图以多CPU的情况举例。cpu:中央处理器,一台计算机的控制核心和运算核心。register:通用寄存器,主要存储cpu当次运算...

2018-12-06 20:14:24 3250

原创 IDEA如何查看GC日志以及含义

1IDEA运行程序如何查看GC日志首先点击IDEA右上角这个位置然后点击第一个2.含义下面是我的IDEA测试的时候打印出来的GC日志[GC (Allocation Failure) [PSYoungGen: 33280K->5112K(38400K)] 33280K->30861K(125952K), 0.1152444 secs] [Times: user=0.25 s...

2018-12-05 17:44:13 3975 2

原创 JVM对象揭秘以及内存布局

下文我将从对象的创建和对象在内存中的布局两个方面介绍1.对象的创建java是一门面向对象的语言,java的世界里,无时无刻都有新的对象产生。在java语法层面上来看,新建一个对象就是java里面的new关键字。那么映射到JVM里面,对象是如何创建的呢。首先虚拟机会查看新创建的对象是否可以在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已经经过类的加载,解析,初始化的过程...

2018-12-04 23:38:36 254

原创 JVM内存模型

1.运行时的内存管理这张图是我在我的书上拍下来的可以看出来内存区域分为线程公用的和线程私有的。1.方法区有时候有可以称为永久代,这部分主要存储的是类加载时的类的信息,常量静态变量以及编译的字节码等信息。常量池就在方法区里面,在类加载的时候有些常量就已经确定,还有的常量需要在运行的时候确定,这部分就称为运行时常量池,同样是作为常量池的一部分。这部分是可扩展的,可以通过启动自定义参...

2018-12-04 20:29:42 98

原创 协议栈

协议栈协议栈是什么?协议栈是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议.使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(HTTP,TELNET,DNS,EMAIL等),运输层(TCP,UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI等)入协议栈的过程(请求的过程)出协议栈的过程(接受的...

2018-11-30 21:35:14 1316

原创 网络中的基本概念

下面的概念都是我自己子在看一些文章的时候看到一些我不懂得次总结出来的。其实我看这些也不是想完全了解底层的原理,我就是希望可以了解一下网络中到底是早怎么工作的,我认为了解一下还是有好处的。这篇文章会一直更新,大家有兴趣可以关注一下。1.ip地址和Mac地址的关系?ip地址在网路世界里面相当于门牌号的作用,而Mac地址代表的则是你真实的地址,对应的就是网络中网卡的地址。这两个关系是一一对应的。...

2018-11-30 18:16:47 147

原创 SSH协议、远程登录

1.SSH协议简介SSH是securityShell的缩写,他也属于安全传输协议的一种。但是与ssl不同的是,它一般是用来做远程登录的。并且他也没有用到ssl协议里面用到的数字证书,但是它和ssl相同点就是两者都使用了非对称加密并且两个协议都是位于传输层和应用层之间的协议。2.两种远程登陆的方式1.使用ssh密钥认证第一种方式就是不用通过密码登录,但是需要远程登录端生成一个ssh密...

2018-11-30 11:20:38 838

原创 域名、浏览器、HSTS和HTTPS的关系

1.浏览器的转换:大家可以找一个浏览器试验一下,我用的是谷歌的chrome浏览器,当你在地址栏输入 baidu.com,然后你再按回车,你发现了什么? 对,地址栏已经把地址自动转换为  https://www.baidu.com了。这种第一种可能是服务器的重定向导致的,第二种百度的实现方式的通过返回 刷新元信息 <meta http-equiv="refresh" content="0"...

2018-11-29 11:21:17 897 1

原创 HTTPS简单优化

下面只是我看了一些文章的出来的一些简单结论。如果想了解特别深入的可以google或者百度一些技术大牛写的博客吧。☺RTT:客户端到服务端来回所需要的时间。1.HTTPS性能损耗的原因上文讲到了TLS/SSL握手,至少需要两次RTT时间的损耗,还有就是握手的时候需要采用非对称加密算法需要耗费大量的系统资源,这一切都会对HTTPS的传输效率产生影响。2.HTTPS简单的性能优化1....

2018-11-28 18:56:41 195 2

原创 https里面的一些基本概念

现在大多数网站都已经从http升级为https了,https最大的一个优点就是安全。因此了解一下为什么https要比http安全还是十分重要的。下面是一些基本的概念性的东西。1.加密加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。————来自百度百科。2.加密算法现在的加密算法应该主要分为两种,对称加密...

2018-11-27 20:29:21 194

原创 程序员写博客的好处?

这个问题,仁者见仁,智者见智。个人拙见1. 写博客可以加强个人的记忆,好多东西看的时候可以理解,但是过了一段时间因为业务上没有用到的关系可能就忘了。如果记录下来,那相当于把自己的感想和当时已经整理好的理解思路记录下来。这样下次再看的时候也可以很快的记起来。2.第二点我觉得很重要,就是写博客可以逼迫我们去把一些东西弄明白,虽然没几个人看,但是如果写出来了就一定要保证自己可以把整个流程捋清楚。...

2018-11-27 16:48:19 475

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除