自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 jar包版本冲突怎样解决

jar包版本冲突怎样解决问题产生的背景​ maven 是一款 jar 包管理工具,它让我们不再关注jar包的查找和下载,通过搭建私服,对一个公司来讲,包的版本管理问题也变得so easy ,但是随之而来的,也也会产生新的问题。问题产生的原因​ maven 下载包是有原则的,对于一个项目同一种 jar 包,只会下载一个版本。maven 是怎样选择不同版本的 jar 包的覆盖优先,对于同一个 pom.xml 文件前面的会被后面的覆盖,所以子工程会优先父工程依赖路径近优先,比如x,在A -

2021-06-18 20:00:51 1076

原创 kafka自学之旅二

kafka自学之旅二生产者对于kafka来讲,生产者是消息产生的源头,那消息在生产者客户端做了那些事情了?配置生产者参数,产生生产者客户端,在消息提交到生产者客户端之后,会被拦截器拦截下来,符合条件的消息经过序列化器序列化成二进制,然后通过通过分区器计算消息所在分区,然后添加在消息累加器里,sender线程把消息发送到Kafka服务端。所以说,一个生产者客户端至少有两个线程,一个主线程,一个sender线程。拦截器生产者客户端消息拦截器像许多框架的拦截器一样,不知一个拦截...

2021-05-06 16:32:37 124

原创 kafka自学之旅一

kafka自学之旅一Kafka简介Kafka是一款基于生产者消费者的消息队列管理软件,一般用于数据的异步处理,请求消峰,消除耦合等场景使用。特别实用于系统日志。既可以把日志和业务解除耦合性,又能一异步化处理,减少日志写入的操作耗时。老版本的Kafka是Scala语言编写的,存在许多漏洞,新的版本Kafka是Java语言编写,弥补了许多老版本的漏洞。是LinkedIn公司捐献给apache公司,成为顶级孵化项目。kafka的优点异步化处理:消息是基于生产者消费者模式,生产者往消息队列添加消息,

2021-05-06 16:29:59 165

原创 git初步

gitgit的简介Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发一个月开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。git的存储结构一般而言,git 存在工作区,暂存区,本地仓库,远程仓库。一般而言,直接修改就是在工作区,git add之后就会进入暂存区,git c.

2021-03-11 14:44:30 135

原创 select,poll,epoll

服务器端面临着这样的问题,多个客户端请求来请求服务器端,服务器端怎样解决这种问题。一种思路是IO多路复用。通过一个监视器监视请求,当有请求来时,就通过某种机制来通知相应的处理。第一种方案是,每当一个请求来就创建一个线程来处理请求,多线程if(fd f : fds){//---------1 if(f has event){//-----2 //处理事件 }}在这个模式下,有两个缺点,第一点是线程上下文切换,当请求过多就会造成上下文切换的资源消耗超过处理

2020-08-27 20:18:45 159

原创 零拷贝

首先零拷贝不是不拷贝,而是没有cpu拷贝,使用的是DMA(direact memery acess)。由于减少了的cpu拷贝或用户态和内核态的切换,他的传输效率确实加快了。零拷贝的实现原理传统的io有四次拷贝(2次DMA,2次CPU),三次内核态和客户态切换mmap(内存映射)io通过内存映射可以解决内核到socket Buffer的拷贝,这就少了一次拷贝,但切换次数是没有变的。通过sentFilesentFile是liunx的一个调用函数,他只有两次DMA,没有CPU.

2020-08-25 19:05:46 179

原创 动态代理----cglib 和 jdk

什么是代理模式代理模式:对于一些功能,他们与业务无关,但又不可缺少,我们希望有这样的一个角色,帮助我们处理这些功能,让我们更加专注处理业务。我们称处理业务的类叫被代理类,帮助我们处理其他东西的类叫代理类。其实在生活中,我们很多地方都用到了代理思想。比如婚姻介绍所,租房中介。实现代理模式怎样实现代理模式,一种实现是代理对象内置,我们称这种代理为静态代理,虽然他实现了我们代理的功能,然后实现代理功能interface Handler{ void handlerMethod();}clas

2020-08-19 15:37:22 124

原创 最详细的单例模式

单例模式:在整个项目中,只产生一个实例化对象,这类主要由数据库连接池等,对于这类对象,一定要小心使用,因为一般而言单例对象在整个项目中存活很久。有甚者贯穿了这个项目生命周期。定义全局的集合的时候,一定要小心集合内的元素,有可能存储在集合的对象在程序中没有作用,但在集合内存在强引用而造成内存泄漏。下面就来介绍几种单例模式的写法。饿汉式/** * 饿汉式:在类加载期间就完成单例对象的绑定。由于在类加载期间是线程安全的,所以饿汉式是不会发生线程安全问题的。 */class SigletonO.

2020-08-16 11:53:40 153

原创 线程进程的通信

线程通信线程是cpu调度的基本单位,进程是资源分配的基本单位,一个进程有多个线程。线程之间怎样通信?volatile对线程通信,主要是保证修改对其他线程可见。而volatile能够保证修饰的变量对其他线程可见,防止指令重排序。跟多的信息请观看https://blog.csdn.net/tangjingui/article/details/107064235sychornized不管是sychornized还是ReentranLock都能保证多线程环境下,和单线程执行结果一样,但他们的原理

2020-08-08 16:56:40 356

原创 最强TCP和UDP

TCP三次握手首先客户端会发送一个SYN=1,seq=x的包给服务器,服务器接收到了该包之后会发送一个SYN=1,ACK=1,ack=x+1,seq=y的包给服务器端。客户端接收到包后,会发送一个ACK=1,ack=y+1,seq=x+1的包给服务器端。第一个包是客户端有一个连接,请求到客户端。SYN标志位表示有需要建立连接。ACK这是确认标志位,只有该标志位为1时才表示该包有效。第二个包表示服务器接收到客户端的连接请求,并希望我服务器和客户端也建立请求。第三个包主要是表示客户端接收到了服务器需要建立连

2020-07-29 20:27:44 131

原创 spring对事务的支持,事务的传播机制

对于事务,这是数据库一种重要的资源,对于这种资源的开销是很大的。spring支持了aop(面向切面编程),所以事务是和核心的代码无关的事情,所以可以使用aop来解决事务。这我们就不讲了,我们用标签来讲。@transactional是事务的标签,标识在一个类上,说明该类的所有的方法都使用事务。标识在方法上,标识该方法是开启事务。建议是使用在方法上。 @transactional只有标识在public方法上才有效。对于事务方法,一般都是其他的方法来调用,这就要求必须可以在包外调用。如果是protected

2020-07-27 21:22:19 212

原创 从BIO开始,讲到NIO,AIO(1)

一BIO(同步阻塞)java的原生io是一种BIO,也就是阻塞io,下面我们将要简单的模仿一下BIO。BIO public class BIO { public static void main(String[] args) throws Exception{ ServerSocket server = new ServerSocket(1999); while(true) { Socket client = ...

2020-07-16 21:26:40 140

原创 Java并发-----AQS(1)

AQS AbstractQueuedSynchronizer同步器,这也是ReentranLock实现锁的基础,如果不知道AQS,就很难理解锁到底是怎么实现的,当然这其中不包括通过synchronize获取的锁,当然我们入手点当然是ReentrantLock,通过ReentranLock lock = new ReentrantLock();一般来讲我们通过lock.lock()来获取锁,ReentrantLock public void lock() { sync.lock...

2020-07-05 20:50:16 182

原创 对称加密,非对称加密,数字签名

互联网传输数据并非安全,这一点在很久以前那些大佬就意识到了,为解决互联网上数据的安全传输,加密算法诞生了。一.对称加密算法对称加密算法是,生产一个密钥,一个加密算法E,一个解密算法D,这个密钥通讯双方都知道,数据传送发方通过密钥和E对传输的数据进行加密,数据接收方通过D和密钥解密。当然加密算法和解密算法对大众是公开的。一般来讲这个密钥是一个64位的,56位有效为,8位检验。对于当时算了来讲,在不知道密钥情况下,破解这样的数据要1000年。完全满足当时的需求。但是互联网的不断发展,算例的不算增加。

2020-07-04 22:42:40 664

原创 volatile

volatile是java的一个关键字,他可以修饰变量,对于java并发来讲,他有不可替代的作用。一概念的解释原子性:在提出这个概念的人当时认为,原子是最小的单位,不可分割,所以他的意思是,在一个原子范围内的操作要不都成功,要不都失败,不可分割。JMM:java 内存模型,java 内存模型是,一个进程内所有线程公用主内存,线程内部有私有内存,当操作时,线程会去主内存读取公共变量,拷贝副本到私有内存,当处理完成之后就会把私有内存的值写回主内存。其实线程私有内存是一个抽象概念,内部是通过缓冲区,寄

2020-07-01 16:25:15 172

原创 Mybatis写一些面试题

#{}与${}区别 在mybatis配置中,我们经常使用#{}和${}占位符,他的作用是占一个位置,后面把这个占位符替代成数据。在用jdbc时,我们有两种,一种是直接把数据拼进sql语句中,使用${}就是这种情况,这种可能会造成sql注入,#{}对应着就是预处理的"?",所以两种都可以使用的时候推荐#{}。 定义的Mapper接口的工作原理,里面的方法可以重载吗? 定义Mapper原理是jdk动态代理,在执行方法时,mybatis会拦截,然后会执行代理对象对应方法,然后把结果返回。na..

2020-06-30 20:49:56 137

原创 spring怎样解决循环

对于控制反转来说,肯定需要通过反射技术来产生bean,当然那就有一个问题了,怎样解决循环依赖问题了,一什么是循环依赖循环依赖,简单来说就是在A类中有B类的实例,在B类中有A的实例,简单理解就是A依赖B,B依赖A,这样构成了环路。当然只要这种依赖构成环路,就可以是循环依赖。二循环依赖的种类按照属性赋值的地方,可以分为构造器循环依赖和setter或者带有Autowire注解的属性的循环依赖,二属性的循环依赖按照属性种类分为singleton循环依赖和prototype类型循环依赖。三解决循环

2020-06-29 16:11:38 271

原创 session和cookie

对于每个学习java web的人来说,session和cookie都非常重要,虽然说随着缓存数据库的流行,session和cookie受到影响,但他们依旧有自己的优点。一cookiecookie的工作原理首先,cookie是存储在客户端浏览器里,用户可以看到,如chrome可以在开发者工具看到,火狐,IE都可以看到,是应用系统为了保持状态,把一些信息存储在客户端,当客户端连接到应用系统时,用于使用的http,怎样服务器端怎样判断客户端是不是第一次连接,需不需要进行验证了,所以,有些系统就想出来,通

2020-06-27 16:10:35 141

原创 从网址到IP地址-----DNS和CDS

互联网连接千家万户,用户在浏览器输入一个网址,然后按enter键,几秒后浏览器会显示页面数据,这是一个访问网站的方式,其实通过网址访问互联网,其实就是通过ip+端口,与服务器进行通讯,传递数据,哪互联网到底是怎样实现从互联网网址到ip地址的转换了,这就是我们的主角DNS域名解析。一DNS1.首先,当客户输入一个网址,浏览器会去浏览器缓存里名去找,是否有对应的ip地址,如果有,就直接返回,客户端直接与该ip进行通讯。没有则进入步骤2。2.客户端会去查找操作系统缓存,看操作系统缓存是否有对应的ip,

2020-06-26 17:32:38 940

原创 Nginx

一.nginx相关概念反向代理在解释什么是反向代理之前,必须要了解什么是正向代理。正向代理:客户端是没法直接访问网站的,必须借助浏览器去访问网站,浏览器内部有记载服务器商搭建的服务器,浏览器把客户的请求发送给浏览器商的服务器,然后服务器的去获取网络资源,客户端对于代理网站是透明的,但对于互联网资源来说是不透明的。反向代理:客户端把请求发送给网络资源服务器,服务器把请求分发到网络资源商的服务器。相对客户端来讲,他对网络资源服务器是不了解的,或者他不知道有这个服务器,客户端请求的网络就是代理服务

2020-06-22 17:08:36 178

原创 java基础-------------------Object

Object除了重写的方法,构造方法,有9个方法,罗雀虽小,但五脏俱全。1.clone这个是个native方法,具体怎样实现的,只能阅读c++代码,看openjdk源码了。克隆是产生对象的方法之一,一般来说,所有的对象调用clone方法,实质干活的都是Object的clone。Cloneable接口和clone方法的关联。Cloneable 是一个没有定义任何东西的接口,但却标识重写了clone方法,但这个方法一般来说都和Object的clone方法有些不同。Object的clone方法

2020-06-16 21:55:29 110

原创 java集合

一 ListArrayList存储结构:他的底层是Object数组,支持泛型,序列化(但真正存储的数组不会被序列化,应为他是transient ),随机查找,克隆。最大值是Integer.MAX_VALUE-8 扩容:ArrayList 的默认初始化大小事10,初始化可以指定初始化大小,或者传递一个Collection,扩容函数是grow,扩容是old + old >>1,值得一提的是在add时候会ensureCapacityInternal(size+1)。在这个方法会调用grow.

2020-06-11 22:05:58 87

原创 java基础之String

String,每一个学习java的人学完java八大基础类型之后,第一个接触的就是String,以我的角度来讲,String可能是java使用最频繁的类了吧。接下来我们将深入地说说String。一,String的类修饰符。...

2020-06-05 22:41:34 102

原创 为什么java数值型的负数比正数多一位

java的数值型有byte,short,int,long。数值类型 可取最小值 可取最大值 byte -128 127 short -32768 32767 int -2147483648 2147483647 long -9223372036854774808 9223372036854774807 为什么负数比正数多一位?原码:数值的二进制表示。反码:除符号位外,其他位都取反。补码:整数的补码是他本身,负数的

2020-05-31 09:57:29 1151 2

原创 String StringBuffer StringBuilder

String类String类是java.lang包下的类,他是封装char[ ]的类,他不是基本类型,但却是使用最为普遍的类之一。String实现了三个接口 序列化java.io.Serializable,比较Comparable<String>,和数组可读序列Comparable<String>他是一个final类, ...

2020-02-27 10:30:19 215

空空如也

空空如也

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

TA关注的人

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