- 博客(34)
- 资源 (1)
- 收藏
- 关注
原创 日志那点事
日志是用于记录程序运行轨迹,在开发环境我们可以使用IDEA或者eclipse开发工具的Debug模式进行调试来查找bug,但是在测试环境或生产环境,是无法进行debug调试的,这时就需要打印日志来记录程序运行轨迹来帮忙查找问题。 在spring项目中,我们常使用logback+log4j框架来打印日志,log4j日志常使用的有DEBUG/INFO/WARN/ERROR四个等级,如...
2019-04-12 11:55:07 164
原创 java线程那点事
java线程有五种状态:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。 Object类中有wait()、notify()、notifyall()方法: wait():将线程从“运行状态”变为“阻塞状态”,线程会被放到线程池中。 notify():唤醒“阻塞状态”的线程为“就绪状态”,唤醒线程池队列中第一个线程。 ...
2019-04-09 14:49:40 240
转载 zookeeper实现分布式高可用
我们通常部署zookeeper集群来实现高可用性,那么zookeeper是如何实现高可用性的呢?集群组成要搭建一个高可用的 ZooKeeper 集群,我们首先需要确定好集群的规模。关于 ZooKeeper 集群的服务器组成,相信很多对 ZooKeeper 了解但是理解不够深入的读者,都存在或曾经存在过这样一个错误的认识:为了使得 ZooKeeper 集群能够顺利地选举出 Leader,必须...
2018-11-23 09:37:42 4715 1
原创 Redis主从复制模式
Redis的主从复制模式是哨兵模式和集群模式实现高可用的基础,那么什么是主从复制模式呢?主从复制模式是Redis提供高可用的服务的手段,分为主节点和从节点,从节点复制来自主节点的数据(通过slave-read-only=true,表示从节点只接受读命令),因为主节点不接受来自从节点的数据,因此一般主从复制模式都设置为主节点接受写命令,从节点接受读命令(这样是为了保证主从节点的数据一致性)。...
2018-11-08 14:05:19 270
原创 Redis连接池
Redis在3.2版本后加入了连接池功能,这样可以在应用中通过池化redis连接提高服务性能。但是在连接池中获取连接实例有时候会出现一些异常错误,这里大概举例两个错误对应的原因: 1、如果在maxWaitMillis时间内仍然无法获取到jedis对象就会抛出如下异常: redis.clients.jedis.exception.JedisConnec...
2018-11-08 11:12:05 491
原创 Redis事务那些事
redis实现事务有两种方式:1、通过Redis自带的命令multi和exec来实现;2、通过lua脚本,因为redis服务器实现了对lua脚本的解析,本文主要对第二种方式进行学习总结。 先简单学习一下lua脚本语言 lua脚本支持字符串strings,数值numbers,布尔booleans和数组tables这几种数据类型,相比其他语言比较单一。 如定义一个...
2018-11-07 16:02:28 148
原创 Java Collection API和Stream API的区别
我们只是说新的Stream API和java现有的集合API的行为差不多:他们都能够访问数据项目中的序列。不过现在最好记得,Collection主要是为了存储和访问数据,而Stream则主要用于描述对数据的计算。这里的关键点在于,Stream允许并提倡并行处理一个Stream中的元素。虽然可能乍看上去有点怪,但筛选一个Collection的最快方法常常是将其转换成Stream,进行并行处理,然后再...
2018-11-07 15:22:29 464
原创 Linux机器上配置java环境
如果Linux机器上没有将jdk路径添加到PATH中,那么在使用的时候只能每次绝对路径指定java命令路径,这样太不方便了。在用户登录到虚拟机时,会主动读取/etc/profile文件,因此在profile文件中将jdk路径添加到PATH全局变量中,具体如下:export JAVA_HOME="/home/app/jdk1.8.0_65export PATH=$JAVA_HOME/bi...
2018-11-07 15:22:02 148
原创 Mongodb写安全设置
在NoSQL数据库中,mongodb数据库被认为是未来新秀。mongodb主从模式中一般被设置成读写分离,即写操作在主节点,读操作在从节点。但是mongodb的主从模式是根据从节点定期到拉取主节点oplog文件中存储的写操作命令,那么问题就来了,如何保证每次在从节点读取到的数据都是最新的呢。 在查看MongoClient类时,发现在该类的构造方法中提供了MongoClientOp...
2018-10-18 14:59:22 291
转载 lua内置函数
•assert(value) - 检查一个值是否为非nil, 若不是则(如果在wow.exe打开调试命令)显示对话框以及输出错误调试信息 •collectgarbage() - 垃圾收集器. (新增于1.10.1) •date(format, time) - 返回当前用户机器上的时间. •error("error message",level) - 发生错误时,输出一条定义的错误信息.使用p...
2018-09-28 10:51:28 1095
转载 jstack,jstat使用
一、介绍jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:jstack [-l] pid 主要分为两个功能: a. 针对活着的进程做本地的或远程的线程dump; ...
2018-09-13 18:12:33 2749
原创 netstat-查看机器网络连接状态
在服务部署到linux机器上后,经常需要查看服务的网络连接状态,可以通过netstat命令来查看。-a: 查看所有的socket连接-t: 查看所有的tcp连接-u: 查看所有的udp连接-n: 直接使用ip地址,不是用域名来显示-l: 查看正在监听的端口-p: 显示socket所关联的服务进程id和服务名称 ...
2018-09-12 15:11:34 5059
原创 Redis学习笔记(一)
Redis是内存数据库,数据以键值对存储,目前Redis支持五种数据类型:字符串、列表、哈希、集合和有序集合,这五种数据类型在Redis中至少有两种及以上的编码方式。 Redis存储数据结构是:redisObject,其中包括:type、encoding、ptr、refcount和lru五种属性,以下分别介绍这五个属性的含义: 1、type:这个属性表示该对象是什么类型数据,包括:...
2018-08-21 09:48:36 117
转载 Lombok注解解析
Lombok注解解析:@NonNull 使用在方法的参数或者构造器的参数上,用于生成null验证。 Lombok可以识别任何第三方工具的字段上标注的@NonNull名称的注解,并在使用@Data、@AllArgsContruct进行生成方法和构造器时进行null判断。 而Lombok的@NonNull注解使用在参数之上,仅仅作用到你自定义的方法和构造器之上。 null判断会采用...
2018-07-30 17:26:19 4550
原创 缓存和数据库一致性
对应比较常用的数据,比如鉴权数据一般会放在缓存中(比如:Redis),这样能够跟快的实现读取,所以一般读取流程如下:目前网上有很多关于缓存和数据库怎么保持一致性的文档,主要可以总结为如下几点: 1、先更新数据库,在更新缓存; 2、先删除缓存,在更新数据库; 3、先更新数据库,在删除缓存;下面将对着几种机制作出说明: 一、先更新数据库,再更新缓存...
2018-07-19 16:11:06 302
转载 jvm调优
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms3550m -Xmn2...
2018-07-09 10:26:18 154
原创 Netty线程模型--EventLoop
Netty主要用于高并发、异步事件驱动的网络框架,被广泛应用于实现高并发的网络服务中。今天注意讲述Netty中使用的线程模型,在java 5中引进了java.util.concurrent.Executor工具类,用于实现Thread复用。在这之前要实现多线程需要每次创建Thread,这样性能较低。 java.util.concurrent提供了Executors工具类用于提...
2018-06-28 15:44:40 213
原创 google的gson工具使用
google提供了一个Gson的工具,能够将.json文件转换成对象,具体使用如下:首先需要将json对象序列号成对象,需要实现JsonDeserializer接口import com.google.common.collect.Lists;import com.google.gson.*;import java.lang.reflect.Type;import java.util.Has...
2018-06-27 17:42:11 301
原创 netty学习之----ByteBuf
java jdk1.4中引入了nio后,ByteBuffer工具类也包含其中,这个工具类使用起来不太方便,因为从写状态变成读状态或者从读状态变成写状态需要调用flip()方法进行切换。而在Netty中对改工具进行了扩展---ByteBuf类,这个类中有三个下标来记录读写状态,分别为readerIndex、writerIndex和capacity。 readerIndex:表示读位置游...
2018-06-22 11:25:41 133
原创 tomcat最大线程数、最大等待数和最大连接数
tomcat是目前较为常用的Web容器,那么怎么配置tomcat才能使得自己的服务效率更高,今天我主要解释一下tomcat的最大线程数(maxThreads)、最大等待数(acceptCount)和最大连接数(maxConnections)。 maxThreads(最大线程数):每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务...
2018-06-20 17:24:37 33334
原创 netty学习心得之ChannelHandler、ChannelHandlerContext、ChannelPipeline
ChannelPipeline中有多个ChannelHandler实例,而每一个ChannelHandler与ChannelPipeline之间的桥梁是通过ChannelHandlerContext来搭建的。 ChannelHandlerContext中有几个函数:@OverrideChannelHandlerContext fireChannelRegistered();@O...
2018-06-12 15:32:25 561
原创 org.apache.commons.pool2池对象工具使用(ObjectPool/PooledObject/PooledObjectFactory)
首先要理解为什么要用到这个工具?因为在创建大对象或者销毁大对象需要消耗比较大的性能开销,但是这个大对象又会在应用中经常使用,这种场景下可以考虑使用对象池(即:将大对象池化)。用对象池来管理大对象的生命周期:获取,激活,验证和钝化等。 具体讲解之前先来说明几个概念: 1、对象池:相当于一个容器,用于管理对象的生命周期:对象的获取,验证,激活等; 2、池对象:...
2018-05-29 11:50:57 3599
原创 java线程之间的通信(wait/notify)
在多线程开发过程中,每一个线程拥有自己的栈空间,就如同运行脚本程序一样,一行一行的运行直到最后结束。但是在线程运行过程中只是孤立的运行显得太单调,如果多线程之间可以相互协调工作才显得跟丰富。 线程之间怎么通信呢?本文主要讲述通过Object类提供的wait和notify两个函数,并结合synchronized关键字来实现线程之间的通信,文章最后通过一道面试题来进行总结。 在Ob...
2018-05-25 14:27:44 742
原创 Java集合类
一、数组集合 这些集合是可根据添加对象的个数进行动态增加的数组,其中ArrayList和Vector两个类在之前的文章中有说明在此就不在重复。HashSet类存储数据是使用的Map工具(即,底层使用的HashMap哈希表结构存储数据),利用Map类存储key-value对是按照key值的hash码进行排序,所以使用HashSet添加数据后,再依次查看存储的对象时,是经过hash码排好序的;T...
2018-05-23 13:43:21 216
原创 Vector数组类
Vector工具类和ArrayList工具类都可以作为可变数组处理,只是Vector是线程安全,ArrayList线程非安全。下面详细介绍Vector类 Vector类实现了List接口和继承了AbstractList类,所以Vector类有和ArrayList类相同的功能,包括添加add,删除remove,修改set(index, object),是否存在contain(objec...
2018-05-22 17:33:07 805
原创 springboot项目使用指定tomcat容器(不使用内嵌tomcat容器)
springboot框架方便了web后端开发,自动嵌入Tomcat容器,但是在开发中如果不想使用SpringBoot框架自动嵌入的Tomcat容器怎么办?本文将详说具体方式。1、在pom.xml配置中设置打包为war包<groupId>com.outside.tomcat</groupId><artifactId>demo</artifactId>...
2018-05-21 10:23:47 11916
原创 java并发编程---ThreadLocal类详解
在并发编程中,如果多个线程共享数据,如果没有对该共享数据进行同步处理,那么在程序运行过程中可能出现一些奇怪的问题。例如一个数据库连接对象,被多个线程使用时,如果某个线程关闭了连接,那在正在使用该连接的线程将抛出异常,这种情况可以使用TreadLocal工具来实现,每一个线程单独拥有一个数据库连接的备份,线程之间互不影响。 一、ThreadLocal类中主要的方法有: 1...
2018-05-18 17:01:41 169
原创 Spring Boot修改Tomcat配置
Spring Boot框架默认使用自动嵌入的Tomcat,可以在配置文件中修改Tomcat的一些参数,具体如下:server. Port = xxxxserver. Address =server. contextPath =server. displayName =server. servletPath =server. contextParameters =server. useForward...
2018-05-18 15:30:54 11964 1
转载 Spring boot打印tomcat日志
在tomcat配置文件server.xml中有一个地方配置打印tomcat的访问日志,但是在spring boot中将tomcat自动嵌入到项目中,这是怎么来配置tomcat的访问日志呢?本篇文章将详细介绍怎么在spring boot中配置tomcat的访问日志(在application.properties)在tomcat的access中打印请求的情况可以帮助我们分析问题,通常比较关注的有访问i...
2018-04-28 18:02:22 10716
原创 Apache Tomcat学习
Tomcat是Apache下的一个开源项目,属于轻量级Web应用服务器,他的配置文件server.xml在tomcat根目录的conf文件下,本文只对Tomcat的配置文件server.xml进行整理。 1、Server标签是server.xml的顶层标签,port属性监听端口,shutdown是表示关闭Server的指令 2、Service标签,这个标签是Server的子标签...
2018-04-28 16:09:55 232
原创 linux查询文件大小
今天在测试环境发现机器的磁盘被占满,但是不知道哪些是大文件,所以在网上搜索了一下关于linux查看目录下所有文件及大小的命令: du -sh *
2018-04-27 17:20:39 1718
原创 Java代码优化建议
今天看了一篇微信推送,关于优化Java代码的建议,总结如下: 1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,...
2018-04-27 16:55:14 270
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人