- 博客(42)
- 收藏
- 关注
原创 mysql 主从复制搭建
master配置1.接入mysql并创建主从复制的用户create user m2ssync identified by ‘Qq123!@#’;2.给新建的用户赋权GRANT REPLICATION SLAVE ON . TO‘m2ssync’@’%’ IDENTIFIED BY ‘Qq123!@#’;3.指定服务ID, 开启binlog日志记录, 在my.cnf中加入serve...
2019-07-14 19:09:18
190
原创 Java NIO 系列教程 (十二) 管道(Pipe)
Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:Java代码Pipepipe=Pipe.open();向管道写数据要向管道写数据,需要访问sink通道。像这样:...
2019-06-03 20:04:39
196
原创 Java NIO 系列教程 (十一) Datagram 通道
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:Java代码DatagramChannelchannel=DatagramChannel.open(); ...
2019-06-03 20:01:52
181
原创 Java NIO 系列教程 (十) ServerSocket 通道
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道,就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:Java代码ServerSocketChannelserverSocketChannel=ServerSocketChannel...
2019-05-20 21:23:09
227
原创 Java NIO 系列教程 (九) Socket 通道
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。 一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:J...
2019-05-20 21:22:17
143
原创 Java NIO 系列教程 (八) 文件通道
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来...
2019-05-20 21:19:14
135
原创 Java NIO 系列教程 (七) 选择器(Selector)
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。(1) 为什么使用Selector?仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开销很大,...
2019-05-20 21:18:23
195
原创 Java NIO 系列教程 (六) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件...
2019-05-20 21:17:10
134
原创 Java NIO 系列教程 (五) 分散(Scatter)/聚集(Gather)
Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。聚集(ga...
2019-05-20 21:16:22
234
原创 Java NIO 系列教程 (四) 缓冲区(Buffer)
Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。Buffer的基本用法使用Buffer读写数据一般遵循以下四个步骤:写入数据到Buffer 调用flip()方法 从...
2019-05-20 21:15:27
268
原创 Java NIO 系列教程 (三) 通道(Channel)
Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现这些是Java NIO中最重要的通道的实现:Fi...
2019-05-20 21:13:36
320
原创 Java NIO 系列教程 (二) Java NIO vs. IO
Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO NIO Stream oriented Buffer oriented Blocking IO Non blocking IO Selectors 面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面...
2019-05-20 21:10:56
142
原创 Java NIO 系列教程 (一) Java NIO 概述
Java NIO 由以下几个核心部分组成:Channels Buffers Selectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。Cha...
2019-05-20 21:05:45
207
原创 Java虚拟机是怎么new的对象?
类加载检查java虚拟机在遇到一条 new 指令时,首先会检查是否能在常量池中定位到这个类的符号引用,并且是否已被加载过、解析和初始化过。如果没有,那必须先执行类加载过程类加载的相关知识可参考:JVM的类加载机制分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。分配方式有 指针碰撞 和 空闲列表 两种 指针碰撞:Java堆中的内存是规整的,所有用过的内存都放在...
2019-05-18 21:12:06
132
原创 漏桶算法和令牌桶算法
一、问题描述 某天A君突然发现自己的接口请求量突然涨到之前的10倍,没多久该接口几乎不可使用,并引发连锁反应导致整个系统崩溃。如何应对这种情况呢?生活给了我们答案:比如老式电闸都安装了保险丝,一旦有人使用超大功率的设备,保险丝就会烧断以保护各个电器不被强电流给烧坏。同理我们的接口也需要安装上“保险丝”,以防止非预期的请求对系统压力过大而引起的系统瘫痪,当流量过大时,可以采取拒绝或者引流等...
2019-05-18 20:54:59
463
原创 dubbo支持的通信协议和序列化协议
dubbo支持的通信协议dubbo协议 dubbo://192.168.0.1:20188 默认就是走dubbo协议的,单一长连接,NIO异步通信,基于hessian作为序列化协议 适用的场景就是:传输数据量很小(每次请求在100kb以内),但是并发量很高 为了要支持高并发场景,一般是服务提供者就几台机器,但是服务消费者有上百台,可能每天调用量达到上亿次!此时用长...
2019-05-11 11:06:05
1259
原创 Dubbo架构设计及原理详解
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描...
2019-05-11 10:51:41
229
原创 分布式事务的四种解决方案
简述分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。解决方案在分布式系统中,要实现分布式事务,无外乎那几种解决方案。一、两阶段提交(2PC)两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。...
2019-05-04 17:39:27
2176
原创 lombok
1.在idea上安装lombok插件2.在pom中引入依赖 org.projectlombok lombok 1.16.20 provided ###### 3.创建测试类import lombok.*;import lombok.extern.log4j.Log4j;import lombok.extern.slf4j.S...
2019-02-24 18:42:48
219
原创 微服务
1.为什么会出现微服务整体应用程序(Monolithic applications)相当成功,但是越来越多的人感觉到有点不妥,特别是在云中部署时。变更发布周期被绑定了——只是变更应用程序的一小部分,却要求整个重新构建和部署。随着时间的推移,很难再保持一个好的模块化结构,使得一个模块的变更很难不影响到其它模块。扩展就需要整个应用程序的扩展,而不能进行部分扩展。2.什么是微服务微服务是一种...
2019-02-11 20:27:35
168
原创 Linux 下搜索文件
linux怎么模糊查找一个文件linux如何模糊查找一个文件 在当前目录下搜索指定文件:find . -name test.txt 在当前目录下模糊搜索文件:find . -name '*.txt' 在当前目录下搜索特定属性的文件:find . -amin -10 # 查找在系统中最后10分钟访问的文件find . -atime -2 # 查找在...
2019-01-14 21:08:09
1070
原创 docker
[docker]docker 的安装检查内核版本,返回的值大于3.10即可。$ uname -r使用 sudo 或 root 权限的用户登入终端。如果不是root用户使用$ sudo su 命令可以到root用户确保yum是最新的Linux升级命令有两个分别是yum upgrade和yum update,这个两个命令是有区别的yum -y update升级所...
2019-01-13 13:34:34
138
原创 在virtualBox上安装Linux虚拟机
1.新建虚拟机打开VirtualBox > 新建 编辑名称、类型、版本,单击下一步注释:因为Centos其实是RedHat的克隆版,所以版本类型选择RedHat(64-bit),两者的关系可参考文章:http://www.linuxidc.com/Linux/2011-07/39098.htm依据自身电脑的实际情况配置,点击下一步点击创建注释:在选择磁...
2019-01-13 13:02:49
24309
原创 使用Git 上传项目
1、(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库git init2、把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点“.”,意为添加文件夹下的所有文件git add .3、用命令 git commit告诉Git,把文件提交到仓库。引号内为提交说明git commit -m ‘first commit’4、关...
2018-11-11 18:05:11
181
原创 Spring Boot 热部署
热部署是什么大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载。而热部署正是利用了这个特点,它监听到如果有Class文件改动了,就会创建一个新的ClaassLoader进行加载该文件,经过一系...
2018-11-10 19:05:37
140
原创 Sping Boot Start
一、Introducing Spring BootSpring Boot使创建可运行的独立的、基于Spring的产品级应用程序变得很容易。只需要很少的Spring配置。可以通过使用Java -jar或更传统的war部署来启动的Java应用程序。还提供了一个运行“spring脚本”的命令行工具。二、System RequirementsSpring Boot 2.1.0.RELEA...
2018-11-10 17:09:36
130
原创 spring的proxy-target-class详解
proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。首先说明下proxy-target-class="true"和proxy-target-class="false"的区别,为true则是基于类的代理将起作用(需要cglib库),为false或者省略这个属性,则标准的JDK 基于接口的代理将起作用。proxy-target-class在spring事务、aop、缓存...
2018-11-06 22:23:24
1655
原创 Servlet
一、Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术。 Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1、编写一个Java类,实现servlet接口。 2、把开发好的Java类部署到web服务器中。 按照一种约定俗成的称呼习惯,通常我们也...
2018-10-28 13:00:02
70
原创 HashMap源码
HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 map.put(String,Obect)方法 时,系统将调用String的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该 hashCode 值...
2018-10-24 22:27:37
89
原创 java.util中ArrayList源码
一、对于ArrayList需要掌握的七点内容ArrayList的创建:即构造器 往ArrayList中添加对象:即add(E)方法 获取ArrayList中的单个对象:即get(int index)方法 删除ArrayList中的对象:即remove(E)方法 遍历ArrayList中的对象:即iterator,在实际中更常用的是增强型的for循环去做遍历 判断对象是否存在于Arra...
2018-10-23 22:34:06
221
原创 java.lang中StringBuilder源码分析
类定义public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequenceStringBuilder 类被声明为 final,说明它不能再被继承。同时它继承了 AbstractStringBuilder 类,并实现了 Serializable...
2018-10-17 23:00:55
219
转载 String.format的使用
常规类型的格式化String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。format(Locale loc...
2018-10-12 14:41:00
101
原创 java中的拆箱与装箱
一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: 1 Integer i = new Integer(10); 而在从...
2018-10-11 22:08:05
118
转载 Spring中bean的作用域与生命周期
在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义以及bean相互间的依赖关系将通过配置元数据来描述。 Spring中的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应...
2018-10-11 17:33:48
138
原创 乐观锁和悲观锁
一、乐观锁 总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。 version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取ver...
2018-10-09 22:04:16
282
原创 Spring的事务管理
首先我们回顾一下什么是事务?事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。事务的特性:原子性、一致性、隔离性、持久性。原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。一致性:指事务前后数据的完整性必须保持一致。隔离性:指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离持久性...
2018-10-08 22:13:58
71
原创 Hibernate的三种状态
学过hibernate的人都可能都知道hibernate有三种状态:transient(瞬时状态)、persistent(持久化状态)以及detached(离线状态),瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session中不存在该对象。但是大家又是否对hibernate的session的那几个特...
2018-10-08 15:37:36
196
原创 java.lang中String源码
String类String类被final所修饰,也就是说String对象是不可变量,并发程序最喜欢不可变量了。String类实现了Serializable, Comparable, CharSequence接口。Comparable接口有compareTo(String s)方法,CharSequence接口有length(),charAt(int index),subSequen...
2018-10-07 22:25:39
105
转载 java.lang中Object源码
package java.lang;public class Object { /*一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用*/ private static native void registerNatives(); /*对象初始化时自动调用此方法*/ static { registerNatives(); ...
2018-10-06 22:18:27
93
原创 深复制与浅复制
一、概念1.浅复制被复制对象的所有变量都含有与原来的对象相同的值,但是对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原来的对象和它的副本之间共享。简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象实例:public class Product implements Cloneable { private String n...
2018-10-06 21:50:39
88
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人