- 博客(121)
- 收藏
- 关注
原创 cas简析
在atomic包中,大多数类都是借助unsafe类来实现的,如以下代码 public static AtomicInteger count = new AtomicInteger(0); private static void add() { count.incrementAndGet(); } incrementAndGet()方法的...
2018-07-22 19:51:34
451
9
原创 spring-ioc简析
本系列博客结合我的理解,对spring的ioc进行简单分析,欢迎大家批评指正。 beanfactory 我们从beanfactory开始,beanfactory是最根部的容器,描述了整个ioc的一些规范和原则,也就是这个接口定义了ioc容器的最基本的条件,下面列出了整个接口中的方法 对于这些方法都可以根据方法名了解它的作用,我们这里需要说一下的是它定义的成员变量“&” Fac...
2018-07-15 19:38:36
413
2
原创 spring代理简析
aop是指面向切面编程,ProxyFactoryBean是spring aop的底层实现与源头,为什么这么说呢?首先我们看一段配置: 1、target是目标对象,需要对其进行切面增强 2、proxyInterfaces是指代理对象所实现的接口 3、interceptorNames:是指通知器(Advisor)列表,通知器中包含了通知advice与切点pointcut 概括一下,Proxy...
2018-07-08 21:34:56
474
2
原创 jvm垃圾回收
垃圾回收我们主要从以下三个方面进行描述 垃圾对象的判断 目前判断对象为垃圾对象有两种方法:引用计数法,可达性分析法,目前普遍是的是可达性分析法 可达性分析法的实现原理: 定义gcroot一直往下找,如果能找到对象,证明该对象在使用,如果找不到该对象,标记该对象应该回收。上图中栈作为gcroot只是其中一种情况,可作为gcroots的对象有虚拟机栈(栈帧中的局部变量表),方法区的类属性...
2018-07-01 20:44:59
289
7
原创 atomic
本篇博客我们主要讲述J.U.C包下的atomic包,在上篇博客“并发模拟”的最后,我们模拟高并发的情形时出现了线程安全问题,怎么解决呢?其实解决的办法有很多中,如直接在add()方法上加synchronized关键字,还有一种就是用atomic包下的类来解决这个问题,这也是现在比较推荐的一种写法,下面我们给出完整代码:@Slf4jpublic class CountExample2 { ...
2018-06-24 21:13:00
407
8
原创 aqs
AQS全称为AbstractQueuedSynchronizer,是并发容器中的同步器,AQS是J.U.C的核心,它是抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类都依赖它,如ReentrantLock、Semaphore、CyclicBarrier、ReentrantLock、Condition、FutureTask等。 AQS的特点: a、使用Node实...
2018-06-17 21:41:56
2360
7
原创 线程不安全的类与写法
什么是线程不安全的类呢? 如果一个类的对象同时被多个线程访问,如果不做特殊的同步或并发处理,很容易表现出线程不安全的现象,比如抛出异常、逻辑处理错误等,这种类我们就称为线程不安全的类 常见线程不安全的类有哪些呢 下图中,我们只画出了最常见的几种情况,我们常见的Collections集合都是线程不安全的 StringBuilder-demo@Slf4jpublic class Str...
2018-06-10 21:29:31
385
3
原创 线程池
相比于线程池,我们可能接触new Thread更多一点,既然有了new Thread我们为什么还要使用线程池呢? new Thread的弊端 a、每次new Thread新建对象,性能差 b、线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM(OutOfMemory) c、缺少更多功能,如更多执行、定期执行、线程中断 线程池的优...
2018-06-03 21:27:36
861
3
原创 jvm(三):对象
关于对象,我们需要面对的问题主要有对象的创建,对象在内存中的布局,对象的结构,对象的访问定位。 对象的创建 对象的创建过程如下图所示: 其主要步骤有:给对象分配内存,初始化对象,执行构造方法。 在对象创建过程中出现的线程安全性问题由线程同步和本地线程分配缓冲来解决 对象在内存中的布局 a、指针碰撞 b、空闲列表 对象内存的分配方式由堆内存是否规整决定,堆内存是否规整又有垃圾回...
2018-05-27 21:49:52
239
10
原创 jvm内存管理
jvm内存区域总体分为5大块:方法区,java堆,虚拟机栈,本地方法栈,程序计数器,按照线程来分的话又分为线程共享区和线程独占区 程序计数器: a、程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器 b、此区域是唯一一个在java虚拟机规范中没有任何outofmemoryerror情况的区域 c、如果线程执行的是java方法,这个计数器记录的...
2018-05-20 20:46:57
288
15
原创 k8s简介
•Kubernetes介绍1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境2.什么是kubernetes Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署...
2018-05-13 21:36:13
353
14
原创 itoo集成jpa
一、 将spring-jpa.xml添加到service中resources目录下的spring包中: 二、 在resources目录下的spring包中的spring.xml中添加此文件配置 三、 新建jpa的repository包,此包类似于mybatis的dao包 四、 更改spring-jpa文件的包扫描路径 将此处改为自己的entity包路径 此处改为新建的repository包的路...
2018-05-06 21:23:54
324
11
原创 记录日志处理的一种方式
根据现在我们itoo的结构,结合开发过程中开发人员对日志使用情况的反馈,以下是我对日志处理的一种新的方式的尝试,仅供大家参考。 Itoo-tool中配置: 首先在itoo-tool中定义的结构如下:exception包中itooException为itoo异常,继承RuntimeException,代码如下: public class ItooException extends RuntimeEx...
2018-04-29 20:31:15
425
13
原创 多线程--volatile关键字
多线程中的volatile关键字,有以下特性volatile:1、强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值2、程安全包含原子性和可见性两个方面,java同步机制都是围绕这两个方面来确保线程安全的3、volatile本身并不处理数据的原子性,而是强制对数据的读写及时影响到主内存4、volatile关键字解决的是变量读取时的可见性问题,但无法保证原子性,对于多个线程访问一个实...
2018-03-25 20:27:30
313
25
原创 多线程--synchronized同步语句块
上篇博客说了同步方法,这篇博客我们来看一下同步语句块的相关内容。首先,一起学习一下基础知识。1、使用synchronized关键字声明方法,从运行时间上看,弊端明显2、当一个线程访问object的一个synchronized同步代码块时,另一个线程仍然可以访问该object对象中的非synchronized(this)同步代码块,所以仅将可能发生问题的代码块放即可3、当一个线程访问object的一...
2018-03-25 20:15:45
523
18
原创 多线程--synchronized同步方法
1、方法中的变量不存在非线程安全问题HasSelfPrivateNum publicclassHasSelfPrivateNum{ publicvoidaddI(Stringusername){ try{ intnum=0; if(username.equals("a")){ num=100; System.out.println("asetover"); Thread.sleep...
2018-03-04 14:33:38
298
11
原创 2017年终总结
白驹过隙,转眼间2017结束了,2018要开始了。回首2017,在2017算是经历了两件比较重要的事情吧,一个是实习,另一个就是ito的上线了。首先说一下实习,实习给我的直观感受就是,在提高班我们是学生,但是在外面我们是已经有了几年工作经验的程序员,我们要有意识的培养自己的交际能力,跟公司的其他人交流的过程中,我们说不了几句话给人的感觉就是略显幼稚,这跟技术无关,不是技术高低的问题,是因为我们真正...
2018-02-28 19:19:00
247
21
原创 多线程--一不小心遇见你
最近刚刚接触了多线程,在此做一个简单的总结,和大家一起分享。1、实现多线程编程的方式: a、继承Thread类 b、实现Runnable接口2、常用方法start() 通知线程规划器此线程准备就绪,等待调用线程对象的run方法,注意执行start()方法的顺序不代表线程启动的顺序 Run方法前加synchronized关键字 使多个线程在执行run方法时,以排队的方式...
2018-02-28 17:39:20
368
15
原创 maven项目代码打成tag?
当我们正在开发的系统有了初步稳定的版本后,通常我们需要在SVN上将稳定的代码打成tag,之后再继续开发扩展功能,具体是如何处理的呢?总体分为两个步骤: 1、将代码的pom文件中SNAPSHOT改为RELEASE,提交SVN打成tag 2、将SNAPSHOT的源码改为下一版本继续开发SNAPSHOT到RELEASE1、在以下目录下,执行maven命令mvn versions:set -D...
2018-02-22 20:23:26
3347
23
原创 SSM添加druid监控
我们的SSM架构中,数据库连接池使用的是druid,druid是有监控页面的,通过druid的监控页面,我们可以检测每条sql语句的执行时间,执行次数等,还可以看到spring中加载的bean,这对程序优化非常有帮助,而且使用起来非常简单,仅需简单的配置即可。、1、配置service层的web.xml添加如下内容:<!--配置druid监控功能--><filter>&l...
2018-02-22 19:46:45
1388
17
原创 SSM添加junit
在框架中添加单元测试是必要的,以junit为例,我们来看一下junit的添加步骤。1、在root中添加单元测试的依赖:<!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12&
2018-02-21 10:03:47
741
13
原创 SSM添加p6spy
1、root的pom中添加依赖:<dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.6.0</version></dependency>2、service的pom引用:&
2018-02-12 08:12:44
743
17
原创 SSM配置日志
一、添加必要的jar包1、root的pom添加如下依赖<!--日志相关--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j-api.version}</vers
2018-02-11 19:16:53
802
12
原创 SSM配置swagger
1、springmvc文件里添加配置2、web.pom中添加依赖!--swagger-->io.springfoxspringfox-swagger22.5.0io.springfoxspringfox-swagger-ui2.5.03、访问地址为 http://服务地址:端口/工程名/swagger-ui.html下图为id
2018-02-04 17:28:33
874
9
原创 SSM整合dubbo
现在,我们的目标是将以上改为dubbo版,下面是我整理的一些步骤。1、root.pom中添加依赖com.alibabadubbo${dubbo.version}org.apache.zookeeperzookeeper${zookeeper.version}com.github.sgroschupfzkclient${zkclient.version}
2018-01-30 20:36:55
2080
10
原创 SSM分布式框架整合
首先,我们看一下每一层的内容:Dao层:Mybatis的配置文件:SqlMapConfig.xml不需要配置任何内容,需要有文件头。文件必须存在。applicationContext-dao.xml:mybatis整合spring,通过由spring创建数据库连接池,spring管理SqlSessionFactory、mapper代理对象。需要mybatis和spr
2018-01-30 20:12:44
1196
12
原创 SSM分布式框架搭建
现在我们看一下我们大家的项目的结构:一、建立框架: 二、建立rootFile –》 New –》Module三、建立子项目toolFile–》New –》Module以同样的方式建立base-manage项目,他的子项目选择org.apache.m
2018-01-30 19:54:17
4068
14
原创 ITOO线上问题(二)
2018年1月19日,近代史考试,下面我来写一下本次考试出现的问题,以及解决问题的思路,和大家一起分享。 近代史考试也是要分为上午三场,下午三场,出现问题的仍然为上午场,因为中午的时候我们发现了问题,所以下午考试的时候没有发生任何问题。 首先,第一场考试的时候,我们mysql服务器的服务器CPU是四核的,也就是说cpu占用最大可达到400%,我们首先top一下,在输入大写的P(
2018-01-21 20:54:07
382
16
原创 ITOO线上问题(一)
ITOO在线上运行的过程中出现了一些问题,个人觉得很有价值,作此整理,和大家一起分享! 2018年1月18日全校性思修考试上午分为三场,和其他考试不同的是思修和近代史考试的突出特点有两个:1、思修和近代史是全校性考试,考试的人数多;2、应学校的要求,思修和近代史在考试之前必须首先填写问卷,学生答完问卷后才可进行考试。 首先,交代一下本次考试出现的现象,第一场考试一切正常,各项监控均
2018-01-20 21:27:58
512
52
原创 dubbo入门
当网站很小时,将所有功能都部署在一起,此时数据访问框架ORM是关键;访问逐渐增大,增加机器带来的加速度越来越小,需要将应用拆成几个互不相干的应用,此时Web框架MVC是关键;当应用继续增加需要将核心业务抽离出来作为独立的服务,此时分布式服务框架RPC是关键。dubbo就是一款优秀的rpc框架。 dubbo的架构如下图:各个节点的角色说明如下:节点说明
2018-01-06 10:39:04
632
5
原创 Maven基础
Maven主要做的是两件事:统一开发规范与工具;统一管理jar包。 Maven仓库:maven使jar包得到了统一管理,jar包存放在哪里呢?他们在本地仓库中,默认是C:.m2目录下。项目首先会从本地仓库中获取jar包,当无法获取制定jar包的时候,本地仓库会从远程仓库下载jar包,这个远程仓库使maven官方提供的。 创建maven项目的时候一般会输入四个坐标
2017-11-05 21:49:24
214
12
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人