
Java学习专栏
文章平均质量分 53
专注于Java语言相关知识的学习
三名狂客
success without applause,diligence without reward!Becoming、Cognifying、Flowing、Screening、Accessing、Sharing、Filtering、Remixing、Interacting、Tracking、Questioning、Beginning.
展开
-
IO多路复用
1、什么是IO多路复用?IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个线程2、为什么出现IO多路复用机制?没有IO多路复用机制时,有BIO、NIO两种实现方式,但有一些问题同步阻塞(BIO)服务端采用单线程,当accept一个请求后,在recv或send调用阻塞时,将无法accept其他请求(必须等上一个请求处recv或send完),无法翻译 2020-07-06 13:57:51 · 1147 阅读 · 1 评论 -
Java 8 中的 Streams API 详解
一、Java 8 中的 Streams API 详解Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任翻译 2020-05-27 18:34:10 · 938 阅读 · 0 评论 -
分布式锁的实现方式
一、redis分布式锁官方叫做 RedLock 算法,是 redis 官方支持的分布式锁算法。分布式锁有 3 个重要的考量点:(1)互斥(只能有一个客户端获取锁)(2)不能死锁(3)容错(只要大部分 redis 节点创建了这把锁就可以)/* * Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights rese...翻译 2020-04-26 17:03:27 · 469 阅读 · 0 评论 -
分布式一致性算法
Paxos共识算法Paxos共识算法,在工程角度实现了一种最大化保障分布式系统一致性(存在极小的概率无法实现一致)的机制。Raft算法Raft算法Raft算法包括三种角色:Leader(领导者)、Candidate(候选领导者)和Follower(跟随者),决策前通过选举一个全局的leader来简化后续的决策过程。Raft算法面向对多个决策达成一致的问题,分解了Leader选举、日志复制和安...翻译 2020-03-25 19:21:35 · 509 阅读 · 0 评论 -
手写Redis之LRU淘汰算法
一、内存淘汰机制redis 内存淘汰机制有以下几个:noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了。allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)。allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key,这个一般没人用吧,为啥要随机...原创 2020-03-06 17:19:27 · 586 阅读 · 0 评论 -
总结高频访问github项目
一、适合学习Java技术体系的github项目,(作者github地址)https://github.com/macrozheng(1)mall(一套电商系统)https://github.com/macrozheng/mall(2)mall-swarm(一套微服务商城系统)https://github.com/macrozheng/mall-swarm(3)springcloud-le...原创 2020-02-27 10:12:46 · 717 阅读 · 0 评论 -
高star Java项目
一、高star Java项目总结(1) 秒杀:https://github.com/qiurunze123/miaosha(2) flink-learninghttps://github.com/zhisheng17/flink-learning(3) advanced-javahttps://github.com/doocs/advanced-java(4) Java成神之...原创 2020-02-24 17:12:21 · 470 阅读 · 0 评论 -
BIO、NIO、AIO之IO
一、BIOimport java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * 阻塞式服务端通信 * @author zc * */public class BIOServer { public static void main(String[] args) throw...翻译 2020-02-19 11:38:15 · 306 阅读 · 0 评论 -
多线程环境下SimpleDateFormat类安全转换
一、SimpleDateFormat类package state;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/** * SimpleDateFormat类负责日期的转换与格式化 * 解决SimpleDateFormat类多线程环境下转换错误问题...原创 2020-02-07 17:17:26 · 2007 阅读 · 0 评论 -
多线程环境下实现各种情形的单例模式
(1)饿汉模式package singleton;/** * 饿汉模式 多线程环境下实现单例模式 * @author zc * */public class SingletonE { //立即加载 饿汉模式 private static SingletonE singleton=new SingletonE(); //私有化构造方法 private Singleto...原创 2020-02-06 18:28:35 · 521 阅读 · 0 评论 -
经常访问的github项目
(1) CS-Noteshttps://github.com/CyC2018/CS-Notes(2) JavaGuidehttps://github.com/Snailclimb/JavaGuide(3) JavaFamilyhttps://github.com/AobingJava/JavaFamily(4) Java3yhttps://github.com/ZhongFuChen...原创 2020-02-04 14:42:18 · 687 阅读 · 0 评论 -
分享开发者书写的好文章(持续更新中)
一、Java后台整合笔记(1) JavaGuidehttps://github.com/Snailclimb/JavaGuide链接: link.(2) CS-Noteshttps://github.com/CyC2018/CS-Notes链接: link.(3) awesome-javahttps://github.com/Snailclimb/awesome-java链接: ...原创 2019-12-23 21:03:38 · 345 阅读 · 2 评论 -
ArrayList,HashMap,LinkedList 初始化大小和 扩容机制
1.ArrayList ArrayList 初始化大小是 10 (如果你知道你的arrayList 会达到多少容量,可以在初始化的时候就指定,能节省扩容的性能开支) 扩容点规则是,新增的时候发现容量不够用了,就去扩容 扩容大小规则是,扩容后的大小= 原始大小*1.5。2.linkedList linkedList 是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者...翻译 2018-07-09 17:51:38 · 9916 阅读 · 1 评论 -
源码如何阅读?
一、昨夜西风凋碧树,独上高楼,望尽天涯路想把源码搞懂,吃透,首先得登高望远,瞰察路径,明确目标与方向,了解源码的概貌。所以有些准备工作必须得做。阅读源码之前,需要有一定的技术储备。 (1)比如设计模式,在很多Java源码中几乎就是标配,尤其是这几个:模板方法,单例,观察者,工厂方法,代理,策略,装饰者。(2)再比如阅读Spring源码,肯定得先了解IoC是怎么回事,AOP的实现方式,CG...转载 2018-06-22 00:02:08 · 1472 阅读 · 5 评论 -
java中String,StringBuider,StringBuffer类源代码
查看源代码工具利器SourceInsight:http://www.sourceinsight.com/。解析参照: 点击打开链接一、String 类二、StringBuffer三、StringBuilder原创 2018-03-14 16:10:02 · 354 阅读 · 0 评论 -
ArrayList和LinkedList的区别
转载出处:链接List概括 先来回顾一下List在Collection中的的框架图: 从图中我们可以看出: 1. List是一个接口,它继承与Collection接口,代表有序的队列。 2. AbstractList是一个抽象类,它继承与AbstractCollection。AbstractList实现了List接口中除了size()、get(int...转载 2018-03-11 22:17:37 · 276 阅读 · 0 评论 -
散列表的java源码实现
散列表的java源码实现,实现代码如下:package com.threetop.www;import java.util.*;import java.io.*;import java.util.function.BiConsumer;import java.util.function.Function;import java.util.function.BiFunction;/原创 2017-05-06 11:04:33 · 600 阅读 · 0 评论 -
栈的java源码实现
栈的java源码实现,代码如下:package com.threetop.www;import java.util.*;/** * java源码实现栈的操作 * @author wjgs * @param */public class Stack extends Vector { /** * Creates an empty Stack. *原创 2017-05-06 10:52:06 · 749 阅读 · 0 评论 -
线程池小结
线程池线程池线程池概述创建一个线程池并提交线程任务线程池源码解析参数认识构造方法提交任务addWorker执行任务关闭线程池线程池概述线程池的优势第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺...翻译 2018-08-25 15:06:49 · 264 阅读 · 0 评论 -
Fork-Join框架的简单使用
一、Fork-Join框架作用 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join框架要完成两件事情: 1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割 2.执行任务并合并结果:分割的子任务分别...原创 2018-08-24 10:27:30 · 631 阅读 · 0 评论 -
多线程四个辅助类的简单应用
一、CountDownLatchimport java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.concurrent.CountDownLatch;...原创 2018-08-23 14:40:38 · 757 阅读 · 0 评论 -
生产者-消费者简单实现
一、车间/** * 车间(电商平台) * @author superman * */public class Tmall { private int count; //当前货物数量 public final int max=10; //车间最大的存储数量 public synchronized void produce() { ...原创 2018-08-22 10:28:12 · 570 阅读 · 0 评论 -
线程安全性问题总结
一、出现线程安全性问题的条件(1)在多线程的环境下 (2)必须有共享资源 (3)对共享资源进行非原子性操作二、解决线程安全性问题的途径(1)synchronized (偏向锁,轻量级锁,重量级锁) (2)volatile (2)JDK提供的原子类 (3)使用Lock(共享锁,排它锁) (4)认识的“*锁”三、常用的锁偏向锁 轻量级锁 重量级锁 重入锁 ...原创 2018-08-22 09:22:34 · 876 阅读 · 0 评论 -
多线程之volatile、ThreadLocal、synchronized关键字区别
1.volatilevolatile主要是用来在多线程中同步变量。 在一般情况下,为了提升性能,每个线程在运行时都会将主内存中的变量保存一份在自己的内存中作为变量副本,但是这样就很容易出现多个线程中保存的副本变量不一致,或与主内存的中的变量值不一致的情况。 而当一个变量被volatile修饰后,该变量就不能被缓存到线程的内存中,它会告诉编译器不要进行任何移出读取和写入操作的优化,换句话说...转载 2018-05-14 23:19:55 · 1817 阅读 · 0 评论 -
Java多线程学习
一、java多线程系列Java多线程学习(一)Java多线程入门Java多线程学习(二)synchronized关键字(1)Java多线程学习(二)synchronized关键字(2)Java多线程学习(三)volatile关键字Java多线程学习(四)等待/通知(wait/notify)机制Java多线程学习(五)线程间通信知识点补充Java多线程学习(六)Lock锁的使用二、java多线程思维...转载 2018-04-09 00:45:52 · 5290 阅读 · 3 评论 -
Java实现多线程的四种方式
一、四种方式如下: (1)继承Thread类创建线程类( 默认包 java.lang.Thread) (2)实现Runnable接口 (默认包 java.lang.Runnable ) (3)使用Callable和FutureTask创建线程 (包 java.util.concurrent.Callable和java.util.concurrent.FutureTas...原创 2018-03-14 19:20:09 · 513 阅读 · 0 评论 -
JAVA线程间的状态转换
线程间的状态转换: 1. 新建(new):新创建了一个线程对象。2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(running):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。4. 阻塞(block...转载 2018-03-09 15:23:54 · 306 阅读 · 0 评论 -
深入java并发体系
java并发体系图:转载 2017-06-28 12:25:14 · 594 阅读 · 0 评论 -
select、poll、epoll之间的区别总结
一、概述select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从...翻译 2018-08-25 15:40:16 · 468 阅读 · 0 评论 -
ConcurrentHashMap源码解析
ConcurrentHashMap源码解析ConcurrentHashMap源码解析jdk8之前的实现原理jdk8的实现原理变量解释初始化初始化tableput操作hash算法获取table中对应的元素f链表或红黑树操作table 扩容get操作jdk8之前的实现原理采取Segment分段锁机制jdk8的实现原理JDK8的实现...翻译 2018-08-25 15:11:39 · 212 阅读 · 0 评论 -
java线程池的四种实现方式
一、newCachedThreadPoolpackage com.mmall.concurrency.example.threadPool;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;@Slf4j...原创 2018-08-03 17:08:47 · 470 阅读 · 0 评论 -
深入解析String的intern方法
转载出处 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种: (1)直接使用双引号声明出来的String对象会直接存储在常量池中。 (2)如果不是用双引号声...转载 2018-07-12 10:25:01 · 468 阅读 · 0 评论 -
JAVA多线程
为什么使用多线程进程之间不能共享内存,但线程之间共享内存很容易系统创建进程需要为该进程重新分配系统资源,但创建线程代价小得多,因此使用多线程来实现多任务并发比多进程的效率高JAVA内置了多线程功能支持,而不是单纯的作为底层操作系统的调度方式,从而简化了JAVA的多线程编程线程的创建继承Thread类(可直接使用this关键字获得当前对象,多个线程无法共享线程类的实例变量)实转载 2017-05-01 21:00:41 · 323 阅读 · 0 评论 -
SpringMVC与structs2区别
转载出处 Struts2和SpringMVC是比较流行的MVC框架,二者的工作流程大体相似,从下面两张图就可以看出。,SpringMVC工作流程图图二 SpringMVC的工作流程描述用户向服务器发送请求,请求被Spring前端控制Servelt DispatcherServlet捕获;DispatcherServlet对请求URL进行解析,得到请求资源标识符(UR...转载 2018-07-11 09:03:27 · 6708 阅读 · 0 评论 -
Java中常用WEB服务器和应用服务器
一、web服务器和应用服务器的区别Web服务器传送页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。 (1)应用服务器处理业务逻辑,web服务器则主要是让客户...翻译 2018-06-29 15:20:31 · 21562 阅读 · 1 评论 -
RPC之消息中间件
一、RPC**RPC(Remote Procedure Call)—远程过程调用 ,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。**RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发分布式程序就像开发本地程序一样简单。 RPC采用客户端(服务调用方)/服务器端(服务...转载 2018-06-23 10:15:31 · 6246 阅读 · 0 评论 -
java核心技术
1、谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗?考点分析:对于这类笼统的问题,你需要尽量表现出自己的思维深入并系统化,Java 知识理解得也比较全面,一定要避免让面试官觉得你是个“知其然不知其所以然”的人。毕竟明白基本组成和机制,是日常工作中进行问题诊断或者性能调优等很多事情的基础,相信没有招聘方会不喜欢“热爱学习和思考”的面试者。回归正题,对于 Jav...翻译 2018-06-15 12:39:05 · 1203 阅读 · 2 评论 -
Spring IOC、AOP的理解和实现的原理
一、 IOC:反转控制 ,创建对象的方式反转了,从自己创建变成了spring容器DI(具体的技术):依赖注入,将必须的属性注入到对象当中,是实现ioc思想必须条件。 二、AOP:面向切面编程(横向重复、纵向抽取) ...原创 2018-06-14 23:53:03 · 9221 阅读 · 0 评论 -
Dubbo架构设计详解
转载出处 参考 Dubbo开源 直到2011年10月27日,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。Dubbo作为阿里巴巴内部的SOA服务化治理方案的核心框架,在2012年时已经每天为2000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自...翻译 2018-06-10 12:00:12 · 4629 阅读 · 0 评论 -
java各版本的新特性
一、java 7(1)改进的通用实例创建类型推断 Map<String,List<String>>map=new HashMap<>();(2)switch语句支持字符串(3)自动资源管理(4)Path和Files二、java 8(1)Lamda表达式 java8的最主要的特性,原创 2018-05-21 16:26:58 · 751 阅读 · 0 评论