自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Gradle中的SourceSet理解

对于maven项目来说,目录结构是固定的,也就是像这样:src/main/ src/main/java/ src/main/resources/src/test/ src/test/java/ src/test/jresources/Gradle也是一样的,他也有一个约定的目录结构,格式和maven的结构一样。但不同的是,g...

2019-04-19 15:00:00 3463

转载 CyclicBarrier正确的使用方法和错误的使用方法

CyclicBarrier是java推出的一个并发编程工具,它用在多个线程之间协同工作。线程约定到达某个点,到达这个点之后的线程都停下来,直到最后一个线程也到达了这个点之后,所有的线程才会得到释放。常用的场景是:多个worker线程,每个线程都在循环地做一部分工作,并在最后用cyclicBarrier.await()设下约定点,当最后一个线程做完了工作也到达约定点后,所有线程得到释放,开...

2019-04-12 17:41:00 536

转载 jstack 结果查看

首先可以用jstack -l pid >sample.dump把java进程的运行栈dump出来。还可以用grep java.lang.Thread.State sample.dump | awk '{print $2}' | sort -n | uniq -c 来看看进程中都有哪些线程状态。2019-01-27 18:11:27Full thread dump J...

2019-01-27 19:14:00 955

转载 java1.8中ConcurrentHashMap

java1.8中的ConcurrentHashMap做了非常大的改动,整个数据结构都发生了变化,已经不存在segment了。所以要好好重新查看下源码。这篇博客是逐步更行的,看一点写一点。首先看一个很重要的参数sizeCtl,这是一个volatile变量,从名字就可以看出,这是一个大小控制参数。这个参数当CHM的table正在被某个线程正在初始化或者正在resize的时候是负数。当在初...

2019-01-27 18:48:00 238

转载 grub2配置关键(三个核心变量prefix、root、cmdpath)和几点疑问

前置知识:你必须知道grub的启动过程以及bios和uefi的相关基础知识,可以参考:《Unified Extensible Firmware Interface Wikipedia》、《linux启动过程简介》先说说三个变量是干嘛的:cmdpath当前被加载的"core.img"(bios的core.img,uefi的BOOTX64.EFI或grubx64.efi等镜像)所...

2019-01-25 10:40:00 1413

转载 关于docker的理解随记

1.容器其实不是什么新技术,说白了就是namespace对资源进行隔离,再加UFS实现分层镜像,以及cgroup实现资源限制。这些技术,都是linux中已有的技术,而且有些技术很早之前就有了。2.上面说了,容器就是用了隔离+分层+限制技术,所以和虚拟机是完全不同的东西,虚拟机那是真真正正的一个操作系统。3.在/roc/pid/ns下,保存着每一个进程对应的namespace,一共...

2019-01-16 22:29:00 94

转载 docker中的命令参数(小白常用)

1 docker run run是最常用的命令,他是docker creat和docker start命令的组合,创建容器并启动它。run的参数比较难理解的是-i 和-t 以及-d,分别说说这三个。-i -i 参数是keep STDIN open even if not attached,意思就是会把交互界面保留着。但是要看容器的PID1,或者说看容器的CMD是什么,有些...

2019-01-16 17:19:00 277

转载 tmux快捷键汇总(常用)

会话外操作: tmux new -s <name-of-my-session> 在会话外创建一个新的会话 tmux ls 在会话外获取会话列表 tmux a(attach) -t <name-of-my-session> 在会话外进入会话,不带名字进入第一个会话 tmux kill-session -t <name-of-my-session&g...

2019-01-09 17:17:00 195

转载 archlinux安装gnome的一些坑随记

问题1:网络设置无法查看,提示缺少NetworkManager解决:安装networkmanager库,因为gnome调用的是networkmanager这个软件来管理网络的。然后要启动它:sudo systemctl enable NetworkManager && sudo systemctl start NetworkManager。问题2:gnome...

2019-01-02 21:29:00 2238

转载 Linux系统启动过程

说启动过程之前,先说说一些背景知识。系统的启动模式有BIOS和UEFI两种,前者比较老,是一直在使用的方式,后者比较性,但是性能比较好,微软知道win10才支持UEFI启动方式。硬盘的分区格式也有GPT和MBR两种,而且启动模式和硬盘分区格式还有一些关系,具体如下:  1.BIOS模式可启动GPT和MBR硬盘上的系统;  2.UEFI一般只能启动GPT上的系统,虽然也支持...

2018-12-27 11:18:00 114

转载 数据库学习笔记1

1.关于属性数据类型里括号的意义:1)对于整数类型后面括号里的数字,只是设置最小显示位数,实际的存储位数还是只和数据类型有关,比如int(4), 当存入值为1时,显示的是0001,但是当存入12345时,还是会显示12345的。占用的内存也是4个字节。2)对于float和double浮点类型,虽然也可以有float(M,D)这样的限制,但是这并不是标准的SQL,为了在数据迁移...

2018-12-26 12:27:00 108

转载 hibernate 学习笔记3

1. 多对多关联:在双方都要用一个类型为Set的属性保存对方的信息,并在映射配置文件中指定这个属性的名字,并指定中间表。还需要通过<key column=””>来指定自己在中间表中对应的外键。在<many-to-many>标签中,要配置对方的类,并且指定对方类在中间表中的对应的外键*学生表配置文件: <class name="edu.whu...

2018-12-26 12:18:00 95

转载 hibernate 学习笔记2

1.Criteria查询接口适用于组合多个限制条件来搜索一个查询集。要使用Criteria,需要遵循以下步骤: *创建查询接口: Criteria criteria=session.createCriteria(User.class); *设置查询条件: criteria.add(Restrictions.gt(“age”,10); *查询数据: List...

2018-12-26 12:17:00 117

转载 hibernate 学习笔记1

Hibernate session11.连接池的最小连接数指的是连接池初始化之后,就存在的连接数,这些连接放在内存中,等待被使用。最大连接数限定了连接池中最大同时连接数量,如果超过了这个数量,则进入等待队列中,需要等其他连接退出之后,才能进行连接。2.自动建表功能有create-drop,create,update和validate四种:1)create-dtrop是:dro...

2018-12-26 12:16:00 82

转载 hibernate 中对象的3种状态总结

1.Hibernate把对象分文三种状态:Transient(临时状态)、Persistent(持久化状态)、Detached(游离状态)。1)Transient:刚刚new出来的对象,就是Transient状态的,此时他没有OID。*获得瞬时态对象** User user=new User();*瞬时态转为持久态—获得了相应的OID。 **session.save...

2018-12-26 11:38:00 144

转载 java中的各种命令参数

java中有很多命令参数,这些命令参数有些是控制jvm行为的,有的则是供应用程序使用。我所了解的参数主要有三种,现在说一说这三种类型的参数。(1)命令行参数。命令行参数就是类似与c语言的命令行参数,这些参数会传给main函数,也就是java中public static void main(String[] args)的那个String数组。但是需要注意的是,c语言的mai...

2018-11-29 16:05:00 143

转载 spring mvc中DispatcherServlet如何得到ModelAndView的

首先看下面这种张图,这张图说明了spring mvc整体的流程。本文讲的就是如何从DispatcherServlet中得到ModerAndView的过程。首先看DispatherServlet这个类的doService方法,学过servlet的人都知道,它是web容器处理请求的入口。 1 protected void doService(HttpServletR...

2018-11-28 11:09:00 586

转载 spring mvc中的控制器方法中的参数从哪里传进来?

编写控制器方法的时候很奇怪,spring是怎么知道你控制器方法的参数类型,并且注入正确的对象呢?比如下面这样@RequestMapping(value="/register", method=GET) public String showRegistrationForm(Model model) { model.addAttribute(new Spitter...

2018-11-21 22:37:00 323

转载 进程中的一个线程死了所引发的后果

我们知道,同一个进程中的多个线程共享进程资源,包括主内存、文件句柄、锁资源等。那么当一个线程死了(非正常退出、死循环等)就会导致线程该占有的资源永远无法释放,从而影响其他线程的正常工作,看下面一个例子。 1 import java.util.concurrent.locks.Lock; 2 import java.util.concurrent.locks.Reentrant...

2018-09-02 11:38:00 1968

转载 hibernate的中的查询与级联操作

1.Criteria查询接口适用于组合多个限制条件来搜索一个查询集。要使用Criteria,需要遵循以下步骤: *创建查询接口: Criteria criteria=session.createCriteria(User.class); *设置查询条件: criteria.add(Restrictions.gt(“age”,10); *查询数据: List...

2018-08-24 15:09:00 327

转载 负载均衡服务器中存在大量的TIME_WAIT怎么解决

首先需要明白什么是TIME_WAIT。TIME_WAIT是在tcp断开连接时进行四次回收的时候,主动断开端在收到被动关闭端的FIN包并发送ACK包给被动关闭后进入的状态。这个状态默认情况下是2倍的MSL(Max segment lifetime,数据段在网络中的最大存活时间),设置TIME_WAIT的主要目的主要有三个:1.确保被动关闭端收到了第四次握手的ACK包,否则被动关闭端在L...

2018-04-19 22:50:00 362

转载 Hash索引和B+树索引总结

先说Hash索引在理想的情况下,key非常分散,不存在Hash碰撞的话,采用Hash索引可以唯一得确定一个key的位置,并且这个位置上就只有一个key,所以查找时间复杂度是O(1),非常快,这是Hash索引的最主要优势。但是呢,Hash索引不是没有缺点,不存在Hash碰撞这是理想情况,通常情况下,同一个Hash值都不只有一个key,也就是说你根据一个key找到了他的hash值位置之后...

2018-04-16 16:47:00 284

转载 温故而知新,再探ConcurrentHashMap

这里说的还是1.7的ConcurrentHashMap,在1.8中,ConcurrentHashMap已经不是基于segments实现了。之前也知道ConcurrentHashMap是通过把锁加载各个segment上从而实现分段式锁来达到增加并发效率的,但是时间久了容易忘,这次再看了一下源码,记录一下以免再忘。为方便起见,把ConcurrentHashMap简称为CHM首先看构造...

2018-04-08 17:45:00 106

转载 数据竞争和先行原则

先行原则规定了先行的操作对后续的操作可见,有效解决了数据竞争问题。数据竞争问题发生在当变量被多个线程读时,同时至少有一个线程在对这个变量进行写,那么写入的变量不一定能够及时被其他线程看见,甚至永远也不能被其他线程看见。 从这里就可以看出,“先行”其实规定的是“可见性”问题,它和操作(读、写、方法调用等)发生的时间先后是两个概念,时间上先发生的,对后发生的不一定可见(当然...

2018-03-21 21:05:00 215

转载 记一次坑爹的jconsole使用

之前一直是用jstat来监控GC的,后来发现原来有个自带的jconsole,是可始化界面的,而且也是oracle公司自带的工具,与是拿来用一下,发现蛮好用的。然而,在一次复现实验中,发现原来能复现的实验突然复现不了了,内存使用居然以下在就将下去了。于是开启jstat gcutil <pid> 2s 30一直监视这GC的使用,发现当jconsole工具连上欲监控的jvm实例...

2018-03-07 16:17:00 124

转载 触发Full GC的时机

由于Full GC的耗时是Minor GC的十倍左右,所以Full GC的频率设计得比Minor GC低得多。现总结一下触发Full GC的情况。在那些实现了CMS的比较新的虚拟机中,如果配置了-XX:+UseConcMarkSwapGC,则启用CMS回收算法,CMS会周期性地检查老年代的情况,每隔一定时间(默认2秒),就检查是否需要对老年代进行一次CMS回收,判断的依据如下:...

2018-02-28 10:56:00 863

转载 java NIO之Selector

Selector是java NIO的核心,通过Selector实现非阻塞式IO。一个Selector可以对应多个不同类型的Channel,并且以SelectedKey进行标记管理。换句话说,Selector只管理SelectedKey而直接管理Channel。 Selector对象中有三个集合,分别是key set,selected-key set和cancelled-...

2018-02-17 12:04:00 77

转载 java NIO之SelectedKey

SelectedKey是channel与Selector绑定的标记,每将一个channel注册到一个selector就会产生一个SelectedKey,并将这个SelectedKey放入到Selected的key set中,注意,key set 只能通过这种方式添加,不可以直接添加,但是可以手动移除。 SelectedKey存在着两个集合,分别是interest set...

2018-02-17 10:46:00 398

转载 java泛型中的各种限制

java和其他语言一样,都支持泛型,包括泛型类和泛型方法,但是java的泛型比较特殊。因为java的泛型并不是在java诞生之初就加入的,在很长的一段时间里,java是没有泛型的,在需要泛型的地方,统统都采用协变的方式,也就是采用Object,比如ArrayList类,元素的类型就是Object。为了兼容原来的代码,java的设计者希望在加入泛型之后,所有的泛型都可以传给原来的对应的非泛...

2018-02-15 11:40:00 92

转载 并发调度的可串行性

可串行化:多个任务并发执行是正确的,当且仅当起结果与按某种次序串行执行这些任务时产生的结果一样,称这种调度策略为可串行化调度。冲突操作:不同任务对同一数据的读写操作和写写操作,其它任务都是不冲突的。冲突可串行化:冲突操作的顺序是不能调换的,不冲突操作可以调换顺序。这样的调换之后,调度仍然是串行的,所以叫冲突可串行化的调度。冲突可串行化是可串行化的充分条件,不是必要条件,所以冲...

2018-02-03 21:10:00 951

转载 mysql limit查询(分页查询)探究

MySQL的Limit子句LIMIT offset,lengthLimit子句可以被用于强制 SELECT 语句返回指定的记录数。Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。//初始记录行的偏移量是 0(而不是 1):  mysq...

2018-01-30 11:01:00 228

转载 通过宏定义将__declspec(dllexport)与__declspec(dllimport)的转化,实现库代码和使用代码使用同一份头文件...

我们知道,在VC编程中,如果要编译成动态链接库,需要将函数、变量、类等导出,这时使用__declspec(dllexport)。使用动态链接库时,需要在声明的时候有使用__declspec(dllimport)导入外部符号。这样,在库的编写时需要使用一份带__declspec(dllexport)的头文件,而在使用库时,又要使用另一份带__declspec(dllimport)的头文件,...

2018-01-24 21:19:00 711

转载 Mysql中各种与字符编码集(character_set)有关的变量含义

mysql涉及到各种字符集,在此做一个总结。 字符集的设置是通过环境变量来设置的,环境变量和linux中的环境变量是一个意思。mysql的环境变量分为两种:session和global。session变量是仅在这次会话红中有效,在mysql中,一次会话可以理解为当前连接(除非reload,否则,一次会话就只有一次连接)。global环境变量则是确定了下一个新建立的session...

2018-01-18 21:46:00 296

转载 Struts2中Action对象的set方法和get方法调用规则

Struts的Action是采用的是多实例多线程设计,而不是像Servlet那样采用单实例多线程设计,因此在struts中,一个请求就对应一个Action对象,个对象之间的数据相互之间互不干扰。没接到一个新的请求,就产生一个新的Action对象,并对Action对象的各属性赋予默认初始值。之后再根据一定的规则调用set方法给各属性赋值,并根据一定规则调用get方法。也就是说,Ac...

2018-01-12 19:41:00 484

转载 Servlet3.0的文件上传功能

在Servlet3.0之前,文件上传需要借助于第三方插件,在Servlet3.0之后,Servlet本身开始支持文件上传功能。获取上传的文件可以通过HTTPServletRequest的getPart和getParts两个方法实现,前者接受一个表单名为参数,返回对应的Part对象;后者返回一个包含所有Part的Collection。通过获取的Part对象,可以实现对所上传文件的操...

2018-01-11 18:09:00 153

转载 HttpServlet的请求转发理解

一个http请求的流转,其实主要涉及到五部分的内容,第一部分就是request所包含的参数,也就是request.getAttribute能获取的东西;第二部分是request所携带的内容实体,这部分实体是由浏览器通过post发送过来的,可以通过request.getInputStream获得输入流之后通过输入流读取;第三部分是requese和response的各种头(对应到ht...

2018-01-10 21:46:00 98

转载 struts 2 报错Could not find action or resul 常见错误原因分析

1.struts.xml配置的action与我们访问的action或返回的result确实没有匹配导致。这个时候要仔细检查Struts.xml配置文件;2.我们的action输入正确,返回结果经过无数次查看都是对的,就是报找不到action或者没有对应的result结果,我们也有解决办法。这个时候很可能是没有编译上Struts.xml。查看项目下的struts.xml文件是否被编译上...

2018-01-05 21:58:00 639

转载 为什么说装饰器模式是运行时扩充,而继承是编译时扩充

装饰器模式主要是为了扩充一个类的功能,也就是说,它把一个类进行了一定的装饰,使它有了新的功能,但保证了类原有的功能。实现的方法通常是把原有类作为装饰类构造函数的一个参数进行传入。咋一看,好像装饰器模式和继承没什么区别,都是保证原有的功能,然后在扩充功能。但其实区别还是挺大的,装饰器模式最主要的优势是比较灵活,因为它修饰哪个类是在运行时才确定的;而继承中,继承哪个类是在编写哪个继承类的...

2017-12-21 16:06:00 244

转载 java io 学习笔记(三) 字符流读写

1、字符流读取 字符流读取的所有类都是从Reader这个超类继承的,都是用于读取字符的,这些类分别是InputSteamReader(从字符流读取)、FileReader(继承与InputStreamReader,读取文件流)StringReader(读取字符串)、PipedReader(读取管道,管道的上端来自于一个PipedWriter)、CharArrayReader(读...

2017-12-20 17:25:00 135

转载 java io 学习笔记(一)

java的IO操作都在java.io包下面,这个包下面有12个接口和而是多各类,类从读写的角度可以分为两种,一种是用于读,一种是用于写;从字符流字节流的角度,也可以分为两种,一种和字符有关,一种和字节有关。这样,所有的类就分为了四种。java的分类方式是先按字节字符分,在分读和写,继承的关系图如下: 所谓读写,就是把从一个源把数据读入内存,或者把内存里的数据写入到一个...

2017-12-20 11:16:00 73

空空如也

空空如也

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

TA关注的人

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