自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

日有寸进

世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活。

原创 深入理解显式锁(Lock)和AQS(AbstractQueuedSynchronizer)(超详细)

显式锁和AQS显式锁Lock特性使用范式APIReentrantLock(可重入锁)锁的可重入锁的公平和非公平APICondition使用范式APILockSupportCLH(队列锁) 显式锁 Lock 接口,实现类:ReentrantLock , ReentrantReadWriteLo...

2019-08-04 12:18:34 1381 2

原创 Netty之编解码器框架

Netty之编解码器框架什么是编解码器解码器ByteToMessageDecoderReplayingDecoderMessageToMessageDecoderTooLongFrameException编码器MessageToByteEncoderMessageToMessageEncoder抽...

2019-08-31 20:27:01 98 0

原创 Netty之ByteBuf相关

Netty之ByteBuf相关概述优点ByteBuf类工作方式使用模式字节级操作随机访问索引顺序访问索引可丢弃字节可读字节可写字节索引管理查找派生缓冲区读/写get*set*read*write*更多ByteBufAllocatorUnpooled 缓冲区 概述 网络数据的基本单位总是字节。J...

2019-08-30 16:49:06 88 0

原创 JVM的学习从这里开始——JVM内存结构

Java虚拟机初探索为什么要了解虚拟机虚拟机历史未来的Java技术Java SE体系架构运行时数据区域线程私有程序计数器虚拟机栈本地方法栈线程共享方法区(永久代(JDK1.7和以前)、元空间(JDK1.8))堆 为什么要了解虚拟机 JVM不单单只支持Java语言,也支持其他语言(Scala、K...

2019-08-29 21:00:14 145 0

原创 NIO通信示例

public class Const { public static int DEFAULT_PORT = 12345; public static String DEFAULT_SERVER_IP = "127.0.0.1"; public ...

2019-08-28 14:56:04 135 0

原创 Netty之Channel相关

Netty概述为什么不用Netty5ChannelChannel 的生命周期状态最重要Channel 的方法事件和ChannelHandlerChannelHandler回调和ChannelFutureEventLoop和EventLoopGroup任务调度线程管理线程的分配 概述 为了快速开...

2019-08-28 14:48:51 306 0

原创 Socket与长短连接

Socket与长短连接Socket短连接长连接 Socket 是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以...

2019-08-26 13:17:57 138 0

原创 关于数组的方法

数组复制: 从序号srcPos开始复制数组src,复制长度为length的一段数组到数组dest的序号destPos的位置。 System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); ...

2019-08-25 16:48:26 42 0

原创 BIO和RPC

Java原生网络编程Socket与长短连接Socket短连接长连接Linux网络IO模型同步和异步,阻塞和非阻塞五种I/O模型阻塞I/O模型非阻塞IO模型IO复用模型信号驱动IO(了解)异步IO模型(了解)五个I/O模型的比较select、poll、epoll的区别 Socket与长短连接 S...

2019-08-25 16:05:20 63 0

原创 NIO基础(三)之Selector

NIO基础(三)之Selector概述创建 Selector注册 Chanel 到 Selector 中SelectionKey类 概述 Selector , 选择器,也被称为多路复用器、轮询代理器等。它是 Java NIO 核心组件中的一个,用于轮询一个或多个Channel 的状态(连接完成...

2019-08-25 14:56:35 84 0

原创 设计模式的六大原则

单一职责原则:一个类或者一个接口只负责唯一项职责,尽量设计出功能单一的接口 依赖倒置原则:高层模块不应该依赖低层模块具体实现,解耦高层与低层。既面向接口编程,当实现发生变化时,只需提供新的实现类,不需要修改高层模块代码 开放-封闭原则:程序对外扩展开放,对修改关闭;换句话说,当需求发生变化时,我们...

2019-08-25 08:30:57 45 0

原创 代理模式和装饰器模式的区别

区别: 代理模式是自己做不了交给别人做,装饰模式是自己做不了变强了再自己做。 例子: 就好像一个明星,职业技能是唱歌跳舞,但他不会接广告,不会做宣传,他可以自己学习这些技能,然后自己做。但显然不合适,作为一个明星,这些功能并不是他需要具备的。 但是他可以找一个经纪人作为自己的代理,帮自己做。 ....

2019-08-25 07:56:34 222 0

原创 剑指Offer——面试题4:替换空格

书中思路: public String replaceSpace(String str1) { if (str == null) { return null; } StringBuffer str = ne...

2019-08-24 17:18:51 41 0

原创 后端开发工程师必须知道的Linux 网络IO模型

Linux网络IO模型同步和异步,阻塞和非阻塞五种I/O模型阻塞I/O模型非阻塞IO模型IO复用模型信号驱动IO(了解)异步IO模型(了解)五个I/O模型的比较select、poll、epoll的区别 同步和异步,阻塞和非阻塞 同步和异步 请求方是否需要等待结果返回。 同步:请求方需要主动...

2019-08-24 11:01:44 91 0

原创 BIO通信示例

下面的示例中,可以创建多个客户端和一个服务端。 每个客户端可以以换行为结束地发送字符串到服务端。 如果字符串为"quit",则结束发送。转为接收模式。 服务端结束接收后,可以发送字符串给接收模式下的随机客户端(因为不知道此时是在哪条线程下)。 如果字符串为"...

2019-08-22 20:15:31 106 0

原创 后端开发工程师必须了解的网络协议基础知识大全

网络协议计算机网络体系结构OSI七层模型TCP/IP模型TCP/IP协议族TCP和UDP地址和端口号端口号的确定端口号与协议 计算机网络体系结构 OSI七层模型 开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询...

2019-08-20 19:00:04 3303 14

原创 大厂很可能会问到的JMM底层实现原理

JMM和底层实现原理计算机原理 JMM(Java Memory Model),Java内存模型。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个虚拟计算机模型,JMM隶属于JVM。Java1.5版本对其进行了重构,现在的Java仍沿用了Java1.5的版本。...

2019-08-19 10:31:38 231 0

原创 println方法可以刷新共享变量?

看如下代码: public class SynMemory { private static boolean ready; private static int number; private static class PrintThread extends T...

2019-08-18 22:13:54 53 0

原创 伪共享示例

public class FalseSharing implements Runnable { public final static int NUM_THREADS = Runtime.getRuntime().availableProcessors(); ...

2019-08-16 15:49:03 169 0

原创 Java并发安全知识点总结

并发安全什么是线程安全性如何做到线程安全线程封闭使用无状态类让类不可变安全地发布 什么是线程安全性 在《Java并发编程实战》中,定义如下: 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步或者协同,这个类都能表现出正确的...

2019-08-14 19:52:54 286 0

原创 动态顺序死锁及活锁示例

这个示例模拟的是2个人相互转账的过程: 个人账户实体类: public class UserAccount { private final String name;//账户名称 private int money;//账户余额 private final ...

2019-08-14 09:10:51 90 0

原创 面试官:请写一段能造成死锁的代码。(附:定位死锁的方法)

思路:定义2个锁、2个方法,2个方法获取锁的顺序相反,且中间有休眠时间。 这样启动2个线程分别运行这2个方法,2个线程会一直处于等锁状态。 public class NormalDeadLock { private static Object valueFirst = new Obj...

2019-08-12 16:06:09 484 0

原创 线程池异常处理示例

定义一个延时任务,可以切换三种状态: 正常执行 抛出异常 抛出异常并捕获 import java.text.SimpleDateFormat; import java.util.Date; public class ScheduleWorker implements Run...

2019-08-10 19:12:53 89 0

原创 线程池扩展功能使用示例

使用了beforeExecute()、afterExecute()、terminated()方法。 作用: beforeExecute():在每个任务执行前执行。 afterExecute():在每个任务执行后执行。 terminated():在线程池关闭后执行。 import ...

2019-08-09 18:04:44 97 0

原创 Java面试经常会问到的线程池,你搞清楚了吗?

线程池为什么要用线程池? 为什么要用线程池? Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到...

2019-08-09 17:44:14 427 0

原创 CompletionService<V>使用示例

构造了一个有返回值的任务,用sleep(随机数)模拟工作时间: import java.util.Random; import java.util.concurrent.Callable; public class WorkTask implements Callable<Inte...

2019-08-09 17:17:18 153 0

原创 手写一个简单的线程池

import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** *类说明:简陋的自定义线程池实现 */ ...

2019-08-08 11:49:59 101 0

原创 并发下的Map常见面试题汇总

并发下的Map常见面试题汇总 Q:HashMap 和 HashTable 有什么区别? A: ①、HashMap 是线程不安全的,HashTable 是线程安全的; ②、由于线程安全,所以 HashTable 的效率比不上 HashMap; ③、HashMap最多只允许一条记录的键为nu...

2019-08-08 11:07:36 815 0

原创 一文彻底搞懂并发容器(ConcurrentHashMap、BlockingQueue等)

并发容器预备知识hashHashMap为什么会出现ConcurrentHashMapJDK1.7中多线程下HashMap死循环分析 预备知识 hash 就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也...

2019-08-08 07:46:22 984 9

原创 模板方法模式

模板方法模式 同步器的设计基于模板方法模式。模板方法模式的意图是,定义一个操作中的算法的骨架,而将一些步骤的实现延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。我们最常见的就是Spring框架里的各种Template。 例子: 我们开了个蛋糕店,我们决定...

2019-08-05 16:40:41 75 0

原创 位运算的运用-权限控制:add,query,modify,del

位运算的运用-权限控制:add,query,modify,del public class Permission { private static final int ALLOW_SELECT = 1<<0;//0001 private static fina...

2019-08-04 17:09:35 83 0

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