Java
文章平均质量分 94
losemyfuture
这个作者很懒,什么都没留下…
展开
-
1.8HashMap源码分析
1、类的基本结构HashMap则是采用拉链法解决哈希冲突最具代表性且最广泛被使用的应用。在1.7及之前版本完全是采用链表来解决,而1.8版本中则比较复杂,在链表的基础上,当链表达到一定长度的时候会转换为红黑树。先读下API文档Hash table based implementation of the Map interface. This implementation provides all of the optional map operations, and permits null va原创 2021-08-20 01:05:35 · 375 阅读 · 0 评论 -
inheritableThreadLocal源码分析
InheritableThreadLocal是ThreadLocal的子类,当父线程创建一个InheritableThreadLocal对象之后,InheritableThreadLocal的内容能够在这个父线程的所有子线程中共享。这个实现相当有意义。比如可以利用这个类实现多线程的共享事务。这个类实际上非常简单,在Thread源码中对其做了支持。一、使用1、测试有如下测试类,在main函数的主线程中给InheritableThreadLocal设置了一个字符串。之后在这个主线程的各个子线程中进行原创 2021-08-20 01:03:50 · 287 阅读 · 0 评论 -
ThreadLocal源码分析
一、使用1、使用例子看如下示例代码,我们有两个线程,a和b,线程a启动之后,sleep 2秒,从threadlocal t1中取获取person实例 p,线程b,启动之后,sleep 1秒,然后set Person的实例p到threadlocal t1中去。public class ThreadLocalTest { volatile static Person p = new Person(); static ThreadLocal<Person> t1 =原创 2021-08-19 16:33:59 · 199 阅读 · 0 评论 -
message中间件
1 中间件1.1 同步请求传统的基于请求/响应的通讯方式,如上图会发生很多问题,比如A通过httpclient调用B的接口(对外暴露的API)请求数据时,在B处理请求以及响应的过程中,A一直阻塞等待响应,在这个过程中还可能由于网络问题导致B的响应没有及时到达,而A由于超时会触发重试机制,不仅占用宽带而且增加了B的压力。甚至可能因为B服务器挂掉之后,对于A要同步到B的数据没有及时同步而产...原创 2018-08-24 06:48:10 · 751 阅读 · 0 评论 -
Dubbo
1 dubbo概述Dubbo是一个分布式开源框架,致力于提供高性能以及透明化的RPC远程服务调用方案,SOA服务治理方案,说白了本质上就是一个远程服务调用的分布式框架。核心:1、远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多线程模型2、集群容错:提供基于接口方法的透明远程小勇,包括多种协议,以及负载均衡、失败容错、集群、地址路由、动态匹配值等3、自动发现:基于注册中...原创 2018-08-28 06:47:59 · 170 阅读 · 0 评论 -
Java缓存机制
1 Java缓存1.1 jvm内置缓存Java中实现缓存的方式有很多,比如用static hashMap基于内存缓存的jvm内置缓存,简单不实用,保对象的有效性和周期无法控制,容易造成内存急剧上升。常用的有Oscache(主要针对jsp页面),Ehcache(主要针对数据库访问层),Jcache,Jbosscache等等很多缺点:容易内存溢出、没有持久化(服务重启后丢失)、线程安全、多...原创 2018-08-21 02:53:25 · 61358 阅读 · 2 评论 -
Zookeeper
1 Zookeeper概述1.1 什么是zookeeperzookeeper是一个分布是开源框架,提供了协调分布式应用的基本服务,它向外部暴露了一组通用服务——分布式同步、命名服务、集群维护等。它主要是简化了分布式应用协调及其管理的难度。提供高性能的分布式服务。为别的分布式程序服务,本身就是一个分布式程序。一般有这几个功能:发布订阅、负载均衡、分布式锁、分布式文件配置中心、master...原创 2018-08-27 20:51:56 · 450 阅读 · 0 评论 -
Nginx
1 Nginx入门1.1 Nginx概述Nginx是一款高性能的http服务器/反向代理服务器以及邮件服务器,cpu、内存资源消耗小,并发量高(5万)。反向代理、代理服务器、静态服务器。作用:集群(减轻单台服务器压力)、反向代理(不暴露真实ip地址)、虚拟服务器(一台服务器提供多个网站)、静态的服务器(动静分离)。选择Nginx?性能好、占用内存CPU资源少、轻量级服务器、同时...原创 2018-08-22 21:20:33 · 401 阅读 · 0 评论 -
微服务
1 微服务简介1.1 项目演变过程项目演变过程分为三个阶段:传统项目——>面向服务架构(SOA)——>微服务传统项目其实就是基于MVC架构的单点应用,将所有的业务逻辑、数据访问层、控制层都放到一个项目中。优点:适合小项目小团队开发,不适用于大的项目开发。为什么?因为一个大的项目肯定有很多人一起开发,每个人需要开发一些功能然后整合到项目中,比如两个人同时修改了同一个类或者一个...原创 2018-08-27 01:40:20 · 349 阅读 · 0 评论 -
Spring boot性能优化
1 Spring boot性能优化1.1 扫包优化@SpringBootApplication注解自动获取应用的配置信息,会给应用带来一些副作用。由自动配置( auto-configuration )和 组件扫描 ( component scanning )组成,这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个...原创 2018-08-19 22:17:17 · 21161 阅读 · 0 评论 -
分布式任务调度
1 任务调度定时JOB,在什么时间进行执行代码任务。1.1 使用线程方式public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { while (true) { try { Threa...原创 2018-08-25 02:08:41 · 2773 阅读 · 2 评论 -
实践杂谈
1、微服务项目结构1、传统项目中一般分为三层架构MVC,缺点就是某个功能出错可能会导致整个项目崩溃,而且随着项目越来越大,维护起来也比较困难,开发时,对于项目的代码整合也是一个比较大的难题。2、分布式系统开发,其实就是将一个大的项目分为不同的系统(记住不是服务)进行开发,这里所指的系统可能包括多个服务,系统之间互不影响,独立运行。3、SOA在分布式开发的基础上,按照服务进行业务的划...原创 2018-09-07 05:59:39 · 198 阅读 · 0 评论 -
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4根据异或的运算法则,2^2^3^1^1=0^3^0=3;所以:class Solution ...原创 2018-10-04 16:28:27 · 5671 阅读 · 1 评论 -
浅谈maven中的scope,systempath
scope maven中scope的默认值是compilescope的分类1)compile 默认是compile。compile表示被依赖项目需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。2)test 表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit3)runtime 表示被依赖项...转载 2018-11-04 03:11:47 · 528 阅读 · 0 评论 -
dependencies与dependencyManagement的区别
1、DepencyManagement应用场景 当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。 由于我们的模块很多,所以我们又抽象了一层,抽出一个itoo-base-parent来管理子项目的公共的依赖。为了项目的正确运行,必须...转载 2018-11-04 03:18:19 · 146 阅读 · 0 评论 -
maven常用技巧
1、查看依赖树:mvn denpendency:tree > d.txt,常用于排查jar包冲突2、mvn versions:set -DnewVersion=1.1-SHAPSHOT,前提得有依赖:<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>ve...原创 2018-11-04 21:43:25 · 252 阅读 · 0 评论 -
持续集成之 Jenkins 的安装与配置(一)
一、持续集成的概念Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目。 监控外部调用执行的工作。 1、持续集成 持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试 。 2、持续交...转载 2018-11-10 18:08:43 · 224 阅读 · 1 评论 -
深入理解动态代理
1、代理特点执行者、被代理人对于被代理人来说,这件事情一定要做,但是又不想去做或者没时间去做需要获取被代理人的个人资料2、jdk动态代理这里以一个买票的实例进行深入买票服务public interface Person { //买票 void butTicket(); String getBegin(); String getNam...原创 2018-12-03 13:21:06 · 198 阅读 · 0 评论 -
Jenkins+gitlab常见错误
gitlab:502一般是电脑配置不够(预留4G内存是最好,不过谷歌浏览器访问时会有些问题,此时清空缓存即可)、端口冲突422错误的话,就是清空缓存/cookie试试,不行就重装,不知道什么意思!!! Jenkins默认端口8080,密码这些都提示,然后可能会发生端口占用,然后无法通过web访问,修改配置文件/etc/sysconfig/jenkins即可 Jenkins整合g...原创 2018-12-03 13:32:49 · 3002 阅读 · 1 评论 -
记一次环境变量导致的elasticsearch启动错误:max file descriptors [65535] for elasticsearch process is too low, incre
问题描述,elasticsearch启动时报max file descriptors错误: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2...转载 2019-01-25 10:35:02 · 7499 阅读 · 0 评论 -
spring源码分析
1、spring ioc源码分析 Spring IOC中bean的创建是利用反射+xml解析实现的,因此这里也围绕这个来做分析。ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Spring所有的工作由这一句代...原创 2018-08-17 02:51:18 · 12729 阅读 · 11 评论 -
SpringBoot
1 SpringBoot概述敏捷开发(整合框架,直接加入依赖就好,自动配置);无须Tomcat(Java应用程序方式运行,实际jar包),内置Tomcat减少xml配置(甚至没有),配置文件properties/yml注解形式SpringBoot 是一个快速开发的框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,内置Tomcat容器,帮助开发者能够实现快速开发,...原创 2018-08-19 16:34:55 · 3917 阅读 · 2 评论 -
Spring事务
1、事务概述事务是一系列的动作,他们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会会滚到最开始的状态,仿佛什么都没发生过一样,用来保证数据的完整性和一致性。特性:1、原子性:事务中包含的所有操作要么全部成功,要么全部失败回滚,不可再分。2、一致性:就是说一个事务执行之前和执行之后都必须处于一个一致性状态。,比如a和b两个用户,a向b转账后,...原创 2018-08-13 10:05:37 · 140 阅读 · 0 评论 -
netty编程
目录1 netty概述2 Netty服务端3 Netty客户端4 长连接和短连接区别5 粘包/拆包怎么解决呢?6 序列化与自定义序列化协议8 几种流行的序列化协议比较8.1XML8.2 JSON8.3 Fastjson8.4 Thrift8.5 Avro8.6 Protobuf8.7 其它8.8 性能对比图解选型建议1 net...原创 2018-08-04 13:37:30 · 404 阅读 · 0 评论 -
Java反射机制
目录 1 反射机制1.1反射机制的作用1.3 反射机制的应用场景1.4 反射机制获取类有三种方法1.5 反射创建对象的方式1.6 禁止使用反射机制初始化1.7 反射创建api1.8 样例1.9 手写spring IOC1 反射机制就是正在运行动态获取当前类的所有信息,类可以不用new,使用Java反射机制帮你初始化。类的私有属性也可以用Java的反射...原创 2018-07-27 05:51:21 · 358 阅读 · 0 评论 -
数据交换格式
1 数据交换格式数据交换格式(报文/参数列表),就是客户端与服务器常用的数据交换格式xml,json,html等,常用于面向接口开发。json:一种轻量级数据交换格式。移动端(安卓、IOS)通讯方式采用http协议+JSON格式 走restful风格。很多互联网项目都采用Http协议+JSON。占用宽带小xml:可扩展的标记语言,重量级交换格式。因为xml比较重WebServic...原创 2018-07-27 04:30:18 · 2644 阅读 · 0 评论 -
Java多线程之线程池原理剖析,锁的深度化
目录 1 线程池1.1 好处1.2 作用1.3 线程池创建方式1.4 原理分析1.5 线程池合理配置2 锁的深度化2.1 悲观锁2.2 乐观锁2.3 重入锁2.4 读写锁2.5 CAS无锁机制2.6 自旋锁2.7 分布式锁1 线程池1.1 好处1)降低资源消耗,重复利用已经创建好的线程,降低线程创建和销毁造成的消耗2)提高...原创 2018-07-27 02:55:30 · 5086 阅读 · 0 评论 -
Socket网络编程
目录 1 网络模型1.1 IP地址与域名1.2 端口的概念1.3 网络模型图2 Socket入门2.1 什么是Socket2.2 TCP和UDP区别2.3 UDP协议样例2.4 TCP2.4.1 TCP报文格式2.4.2 TCP三次握手2.4.3 四次挥手2.4.4 三次握手和四次挥手面试问题2.4.5TCP的滑动窗口机制2.4.6 ...原创 2018-07-29 05:49:00 · 7145 阅读 · 1 评论 -
Java多线程之并发包,并发队列
目录1 并发包1.1同步容器类1.1.1Vector与ArrayList区别1.1.2HasTable与HasMap1.1.3 synchronizedMap1.1.4 ConcurrentHashMap1.1.5 CountDownLatch1.1.6 CyclicBarrier1.1.6 Semaphore2 并发队列2.1 Concur...原创 2018-07-25 04:06:19 · 995 阅读 · 0 评论 -
多线程之间通讯JDK1.5-Lock
synchronized:代码开始上锁,代码结束时释放锁;内置锁、自动化的、效率低、扩展性不高(不够灵活);JDK1.5并发包Lock锁 --保证线程安全问题,属于手动挡,手动开始上锁,手动释放锁,灵活性高;Lock 接口与 synchronized 关键字的区别Lock 接口可以尝试非阻塞地获取锁 当前线程尝试获取锁。如果这一时刻锁没有被其他线程获取到,则成功获取并持有锁。Lock...原创 2018-07-24 04:32:49 · 120 阅读 · 0 评论 -
java多线程之volatile关键字
public class ThreadVolatile extends Thread { public boolean flag=true; @Override public void run() { System.out.println("子线程begin。。。。。。"); while(flag){} System.ou...原创 2018-07-23 20:05:44 · 201 阅读 · 0 评论 -
Web开发高级技术
1 http长连接与短连接HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。1.1 如何理解HTTP协议是无状态的HTTP协议是无状...原创 2018-08-09 03:52:46 · 5360 阅读 · 0 评论 -
自定义注解
目录 1注解1.1作用1.2 注解1.3 内置注解1.4 自定义注解1.5 样例——实现ORM框架映射1注解1.1作用为了简化代码,提高开发效率。1.2 注解jdk1.5新增新技术,注解。很多框架为了简化代码,都会提供有些注解。可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件。注解不会也不能影响代码的实际逻辑,仅...原创 2018-07-28 01:52:11 · 228 阅读 · 0 评论 -
spring IOC和AOP
1 Spring概述企业级 Java 应用程序开发框架。开源的 Java 平台。轻量级的框架,其基础版本只有 2 MB 左右的大小。扩展性好。我的理解:Spring是一个解决bean(对象)的创建以及与其他对象之间依赖关系的一种框架(容器)。且可以和洽谈的一些框架进行整合使用,例如struts2、mybatis、hibernate等。那么我们为什么需要这个东西?这个就要说到...原创 2018-08-12 21:59:06 · 276 阅读 · 0 评论 -
NIO编程
1 NIO概述Java NIO(New IO)是一个可替代Java IO API(从Java1.4开始),JAVA NIO提供了与标准IO不同的工作方式。Java NIO:Channels and Buffers(通道和缓冲区)标准的IO基于字节流或者字符流进行操作,而NIO基于通道和缓冲区进行操作,数据是总是从通道读取的缓冲区中,或者从缓冲区写入到通道中。Java NIO:Non...原创 2018-08-03 05:09:27 · 6289 阅读 · 2 评论 -
Http协议入门
1 什么是http协议http协议:浏览器客户端和服务器端之间数据传输的格式规范1.1 Http请求GET /hello HTTP/1.1 -请求行Host: localhost:8080 --请求头(多个key-value对象)User-Agent:Mozilla/5.0 (Linux; Android 6.0;...原创 2018-08-07 14:43:12 · 539 阅读 · 0 评论 -
mybatis基础
1、mybatis简单例子MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数库中的记录.mybatis和hibernate区别...原创 2018-08-11 14:22:34 · 363 阅读 · 0 评论 -
Mysql优化
1 数据库设计要合理(3F)为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。关系型数据库中这种规则称为范式。1.1 三大范式1.1.1 第一范式1NF是对属性的原子性约束,要求属性列具有原子性,不可再分解;id name address 1 xiaoming 广州市番禺区大山村 以上图User表为例,所谓的原子性其实取决...原创 2018-08-11 10:48:09 · 354 阅读 · 0 评论 -
Web开发入门
1 Web基础1.1 javaee和javasejavase: java桌面程序,控制台控制,,多线程,IO,网络(socket), gui界面javaee:java web程序。浏览器控制1.2 软件的结构一般软件结构有两种B/S和C/S两种。C/S(Client-Server 桌面应用程序->客户端-服务端):特征:需要下载安装包才能运行,服务端升级时客户端也...原创 2018-08-06 09:54:45 · 186 阅读 · 0 评论 -
垃圾回收机制算法
1 垃圾回收机制概述Java垃圾回收机制其实就是GC线程不定时的回收堆内存中的不可达对象。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。1.1 垃圾回收过程注意:不可达对象并不会马上就被直接回收,而是至少要经过两次标记的过程。 第一次被标记过的对象,会检查该对象是否重写了f...原创 2018-08-06 07:05:40 · 4973 阅读 · 0 评论