- 博客(14)
- 资源 (3)
- 收藏
- 关注
原创 arthas排坑(一):远程监控
一、arthas简介 为了进一步提升自己的技术,最近有计划深入研究一些开源项目,于是在github上找到了arthas。它是阿里开源的Java诊断工具,据官方文档所述,它可以帮助你解决下列问题:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit...
2018-12-02 18:56:06 16890 3
原创 Disruptor学习总结(二):Disruptor分析
一、RingBuffer相关 在上文中我们介绍了RingBuffer的结构,这里我们就不再赘述了。它比操作数组更快,因为不用删除对象,数据对象可以复用,但是我们还存在几个疑问。整个生产/消费环境是怎样协调的?RingBuffer如何防止数据覆盖?接下来,我们就这两个问题进行分析。1、生产/消费协调 当生产者和消费者都只有一个时,两个线程分别操作不同的指针(一读一写),此时不需要锁
2017-06-08 22:15:28 632
原创 Disruptor学习总结(一):Disruptor的使用
一、简介 Disruptor是一个生产者/消费者模式的框架,它有一个名字叫RingBuffer的容器。生产者生产数据,往RingBuffer上面装;消费者从RingBuffer上取数据,就像JDK中concurrent包的BlockingQueue一样,可以同时存取。但是Disruptor采用了无锁机制、批量消费等一系列优化策略,比BlockingQueue性能更优。至于它可以做什么,那就
2017-06-08 20:07:24 881
原创 自定义Java线程池
一、引言 我们先简述一下Java线程池到底是什么。线程池,其实就是封装线程的一个容器,里面有一组线程,说成池比较直观一点。为什么要这样做呢?众所周知,线程的创建和调度都是需要消耗内存和CPU的。如果用普通线程来处理任务的时候,一般是一条线程处理一个任务。而在线程池,线程数量是有限的,任务可以暂时的放到队列中,等待线程来完成它们。 在学习线程池之前我们先来明晰一个很简单的概念,
2017-06-07 16:20:28 446
原创 Synchronized的实现原理(汇总)
一、Java中synchronized关键字的作用 总所周知,在并发环境中多个线程对同一个资源进行访问很可能出现脏读等一系列线程安全问题。这时我们可以用加锁的方式对访问共享资源的代码块进行加锁,以确保同一时间段内只能有一个线对资源进行访问,在它释放锁之前其他竞争锁的线程只能等待。而synchronized关键字是加锁的一种方式。 举个通俗易懂的例子:比如你上厕所之后,你要锁门
2017-05-25 10:08:09 1241
原创 Java线程基础
一、线程相关概念1、程序、进程与线程程序:一段独立的静态代码,是一组指令的有序集合,它是静态的实体。就像活动进行前所列的计划一样。进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体。它有自己的唯一标识,也可以拥有资源,是系统进行资源分配和调度的一个独立单位。如果将程序比作活动前的计划,那么进程就是活动的执行了。线程:线程是进程的一个实体,是CPU调
2017-05-20 09:52:15 274
原创 (四)Strut1.x原理剖析
一、基础回顾这里先回顾一下Struts1.x的基础,到底一个最简单的Struts程序包含哪些部分?ActionServlet:它是整个Struts框架的中央控制器,包括请求的接收、分发、处理和页面跳转。它是Struts自带的Servlet类,需要在web.xml中配置,并初始化config参数,这个参数指定struts配置文件的位置。struts配置文件:是一个xml格式的文件,不配置的话默认是
2017-05-18 10:15:38 285
原创 (三)Struts1.x高级应用
一、国际化1、什么是国际化按照我个人的理解,国际化就是根据客户端的语言环境显示不同的语言。也就是服务器根据客户端提交过来的语言环境返回不同的内容(客户端语言环境会在请求头“Accept-Language”中提交过来)。2、Strut1.x国际化的使用(1)、提供不同的资源包资源包的命名格式:包名_语言简写_国家简写.properties(如:languang_zh_CN.properties),资源
2017-05-17 08:14:59 280
原创 (二)Struts1.x校验器
一、什么是校验器(Validator)在Struts1.x中,校验器能校验客户端提交的数据是否符合要求。如果不符合要求,则会跳转到struts配置文件的“action”标签中“input”属性指定的页面;对于是否进行校验,可以通过“action”标签中的“validate”属性指定,默认为true,即开启校验功能。二、初识Struts1.x校验功能前面的《一个简单的Struts程序》已经说过Stru
2017-05-16 15:26:14 325
原创 (一)一个简单的Struts程序
一、Struts1.x介绍 众所周知,Struts是JavaWeb开发中的常用框架,但是框架有什么用?Struts又充当什么角色呢? 框架被设计出来,提高了代码的重用性,很多重复性的的底层操作都在框架中被封装好了,所以开发者只需要关注他的业务逻辑,开发效率就大大地提高了。 JavaWeb开发中经常用到MVC模式,M是指Model(模型),专注于业务逻辑、数据的存储和处理等,V是
2017-05-16 10:28:23 357
原创 一步步分析SpringMVC源码
一、处理过程分析 1、首先,Tomcat每次启动时都会加载并解析/WEB-INF/web.xml文件,所以可以先从web.xml找突破口,主要代码如下:<servlet > <servlet-name >spring-mvc</servlet-name> <!-- servlet类 --> <servlet-class >org.springframework.web
2017-05-10 22:04:29 9763 8
原创 Java内存模型
Java内存模型一、Java内存模型内部原理图示: 每个线程都有自己独立的工作内存,线程的所有操作都是在自己的工作内存中完成的,所以每个线程的操作数都是独立的,不共享。要实现其他线程可见必须将工作内存中的变量写回主存中。 通过以下操作可以进行内存间的数据交互(最后的“()”中给出简易版解析,方便理解):lock(锁定):作用于主内存的变量,把一个变量标识为一
2017-05-07 18:37:08 399
原创 MySQL视图
MySQL视图一、什么是视图 视图是一种虚拟存在的表,它并不在数据库中实际存在,而是在使用中动态生成的。二、视图的作用1、安全:使用视图用户只能访问到他们有权限访问的数据(具体到每一列),对表的权限管理不能具体到每一列。 2、简单:使用视图不用关心表的结构、关联条件和筛选条件,因为它是动态生成的,在定义视图的时候已经对相关语句进行了定义。 3、数据独立:视图可以屏蔽表结构变化对用户的影响
2017-05-07 15:40:38 688
原创 MySQL备份与恢复
MySQL备份与恢复一、环境准备1、操作系统:Ubuntu 14.04.4 2、数据库:MySQL5.5 3、起始数据:test数据库有user表和address表,二者无关联关系 user表: address表: 二、MySQL备份 MySQL备份分为全量备份与增量备份,**全量备份**是对指定数据库或表的**所有数据**都进行备份,**增量备份**是指对某个时间区间增加或者修改的
2017-05-07 10:39:10 315
spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar
2018-09-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人