
T-JAVA
文章平均质量分 73
java系列文章
_txg
平凡,是为了最美的荡气回肠
展开
-
1.3Spring与MyBatis整合
将MyBatis与Spring进行整合,主要解决的问题就是将SqlSessionFactory对象交由Spring来管理。所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在Spring容器中,再将其注入给Dao的实现类即可完成整合。方式:Mapper动态代理 支持扫描的Mapp...原创 2018-08-04 16:45:04 · 257 阅读 · 0 评论 -
Spring与JDBC模板(IOC的应用)
Spring与Dao部分,是Spring的两大核心技术IOC与AOP的典型的应用体现。 为了避免直接使用JDBC而带来 的复杂且冗长的代码,Spring提供了一个强有力的模板类--jdbcTemplate来简化JDBC操作。并且,数据源DataSource对象与模板jdbcTemplate对象均可以通过Bean的形式定义在配置文件中,充分发挥了依赖注入的威力。 注意:JDBC模板对...原创 2018-08-04 16:37:02 · 441 阅读 · 0 评论 -
SpringMVC 概述
SpringMVC 简介SpringMVC是Spring框架的一部分,是在Spring3.0以后发布的。 SpringMVC的简单应用用户提交一个请求,服务端处理器在接收到这个请求之后,给出一条欢迎信息。SpringMVC框架的执行流程 配置web.xmlurl-pattern只能配*.do , 不能配 /* , 因为 /* 会匹配所有...原创 2018-08-05 14:47:06 · 342 阅读 · 0 评论 -
4-Spring框架 之 AOP
AOP简介 AOP(Aspect Orient Programming),面向切面编程,是面向对象编程(OOP)的一种补充,面向对象编程是从静态角度考虑程序的结构,而面向切面编程是从动态角度考虑程序运行过程。 AOP底层,就是采用动态代理模式实现的。采用了两种代理:JDK的动态代理,与CGLIB的动态代理。 面向切面编程,就是将交叉 业务逻辑封装称切面,利用AOP容器的功能...原创 2018-07-22 20:37:39 · 227 阅读 · 0 评论 -
3 -Spring框架 之 IOC
Spring 框架概述 Spring是个容器,(2)用于降低代码间的耦合度,(3)根据不同的代码它采用的IOC和AOP两种技术进行解耦合。 Spring是于2003年兴起的一个轻量级的java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面编程(AOP)。简单来说,Spring是一个分层的javaSE/EE full-stac...原创 2018-07-20 15:53:34 · 343 阅读 · 0 评论 -
2 MyBatis框架基础知识
1.1 框架 对于程序员来说,框架是一套资源,这套资源中包含jar包、文档。还有一些包含源码、代码示例等。这套资源从相关的官网上可以下载。一般是以压缩文件的形式出现。 1.1.1 Mybatis的下载 MyBatis可以在github官网下载http://github.com/mybatis 1.1.2 Mybatis的Jar包 MyBatis框架的解压目录中只有一个Jar包,它是Myba...原创 2018-07-12 20:04:23 · 575 阅读 · 0 评论 -
1 代理模式
1 代理模式代理模式是指,为其他对象提供一种代理控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用。换句话说,使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑。客户类真正的想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象。客户类对目标对象的访问是通过访问代理对象来实现的。当然,代理类与目标类要实...原创 2018-07-03 08:17:10 · 215 阅读 · 0 评论 -
27 Redis 初识
NOSQL简介 NoSQL,泛指非关系型数据库,NoSQL数据库的四大分类:键值存储数据库:这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。如Redis,Voldemort,Oracle BDB列存储数据库:这部分数据库通常是用来对应分布式存储的海量数据,键任然存在,但是它们的特点是指向了多个列。如HBase,Riak。 非关系型数据...原创 2018-07-20 08:56:58 · 319 阅读 · 0 评论 -
26 JVM基础
1.1 java虚拟机的运原理所谓虚拟机,就是一台虚拟的机器,它是一款软件,用来执行一系列虚计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机。VMare就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。程序虚拟机典型代表就是java虚拟机,它专门为执行单个计算机程序而设计,在kava虚拟机中执行的指令我们称为java字节码指令。无论是程序虚拟机还是系统虚拟...原创 2018-07-12 11:37:07 · 393 阅读 · 0 评论 -
25 Netty框架 结合 JBoss-Marshalling编解码框架实现数据对象的传输
Netty编解码技术编解码技术,说白了就是java序列化技术,序列化目的就两个。第一进行网络传输,第二进行对象持久化。虽然我们可以使用java进行对象序列化,netty去传输,但是java序列化的硬伤太多,比如java序列化没法跨语言、序列化后码流太大、序列化性能太低等等。主流的编解码框架:JBoss的Marshalling包Google的Protobuf基于Protobuf的KyroMessag...原创 2018-07-10 21:04:45 · 302 阅读 · 0 评论 -
24 Netty解决TCP拆包粘包问题
3.1 TCP粘包拆包的问题TCP是一个“流”协议,所谓流就是没有界限的遗传数据。TCP底层并不知道上层的业务数据的具体含义,他会根据TCP缓冲区的实际情况进行包的划分,也就是在业务上,我们一个完整的包可能会被TCP分成多个包进行发送,也可能把多个小包封装成一个大的数据包发送出去,这就是所谓的TCP粘包、拆包问题。TCP粘包、拆包问题的产生原因:1、应用程序write写入的字节小于大于套接口发送缓...原创 2018-07-10 21:01:18 · 263 阅读 · 0 评论 -
23 网络编程 Netty框架 初识
1.1 Netty简介Netty是最流行的NIO框架,他的健壮性、功能、性能、可定制性和可扩展性在同类框架都是首屈一指的。它已经得到成百上千的上也项目验证,如Hadoop的RPC框架Avro、以及JMS框架,强大的RocketMQ,还有主流的分布式通信框架Dubbox等等。主要原因:简单。Netty是基于Java NIO的网络应用框架 1.2 Netty架构组成 1.3 Netty特性 2.1 ...原创 2018-07-08 13:30:11 · 324 阅读 · 0 评论 -
22 SocketIO网络编程基础概念(BIO、NIO、AIO)
1.1 socket基本概念Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,socket是建立网络连接使用的。在连接成功的时候,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,不因为在服务器端或者...原创 2018-07-08 13:25:09 · 698 阅读 · 0 评论 -
21 ReentrantLock(重入锁) & ReentrantReadWriteLock(读写锁)
锁(重入锁,读写锁)它们具有比synchronized更为强大的功能,并且有嗅探锁定、多路分支等功能。重入锁,在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁定,不然会造成锁永远无法释放,其他线程永远进不去的结果。 package edu.sdut.lock; import java.util.concurrent.CopyOnWriteArrayList;imp...原创 2018-07-04 17:02:57 · 762 阅读 · 0 评论 -
20 Semaphore信号量
8.3 Semaphore信号量在Semaphore信号量非常适合高并发访问,新系统在上线之前,要对系统的访问量进行评估,当然这个值肯定不是随便写的,是经过以往的经验、数据、历年的访问量,已经推广力度进行一个合理的评估,当然评估标准不能太大也不能太小。太大的话投入的资源达不到实际的效果,纯粹浪费资源,太小的话,某个时间高峰值的访问量上来直接可以压垮系统。相关概念:PV:(page view) 网站...原创 2018-07-04 16:59:46 · 199 阅读 · 0 评论 -
18 CyclicBarrier & CountDownLacth
CyclicBarrier使用假设只有一个场景,每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待。 代码示例: import java.io.IOException; import java.util.Random; import java.util.concurrent.BrokenBarrierException; import java.u...原创 2018-07-04 16:57:49 · 254 阅读 · 0 评论 -
17 线程池
Executor 框架为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效地进行线程控制。它们都在java.util.concurrent包中,是JDK并发包地核心。其中有一个比较重要地类:Executors,他扮演着线程工厂地角色,我们通过Executors可以创建特定功能地线程池。Executors创建线程池方法: NewFixedThreadPool()方法,该方...原创 2018-07-03 08:15:14 · 427 阅读 · 0 评论 -
16 Master-Worker模式
6.3 Master-Worker模式Master-Worker模式是常用的并行计算模式,它的核心思想是系统由两类进程协作工作:Master进程和Worker进程。Master负责接收和分配任务,Woker负责处理子任务。当各个Worker子进程处理完后,会将结果返回给Master,由Master做归纳和总结。其好处是能将一个大任务分解成若干小任务,并行执行,从而提高系统的吞吐量。 Maste...原创 2018-07-01 13:09:55 · 331 阅读 · 0 评论 -
15 Future模式
6.2 Future模式Future模式:页面是异步的进行后台处理,用户无需一直等待请求的结果,可以继续浏览或者操作其他内容。 代码模拟Future模式:/** * 主函数,先发送请求,启动一个线程去执行查询 * 当前线程继续并发执行 */public class Main { public static void main(String[] args) {FutureClient fc = n...原创 2018-07-01 13:08:51 · 231 阅读 · 0 评论 -
14 并发Queue
1.1 并发Queue在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。 1.2 ConcurrentLinkedQueueConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发下的高性能,通常Concurren...原创 2018-06-29 14:08:52 · 292 阅读 · 0 评论 -
13 ConcurrentMap & Copy-On-Write容器
1.1 ConcurrentMapConcurrentMap接口有两个实现类:ConcurrentHashMapConcurrentSkipListMap(支持排序功能,弥补ConcurrentHashMap)ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的HashTable,他们有自己锁。只要多个修改操作发生在不同的段上,他们就可以并发进...原创 2018-06-29 14:07:07 · 297 阅读 · 0 评论 -
12 同步类容器&并发类容器
1.1 同步类容器同步类容器都是线程安全的,但是在某些场景下可能需要加锁来保护复合操作,复合类操作如:迭代(反复访问元素,遍历完容器中所有的元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发地修改容器时,可能就表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由...原创 2018-06-29 14:04:37 · 202 阅读 · 0 评论 -
11 单例&多线程
单例模式,最常见的就是饥饿模式,和懒汉模式,一个直接实例化对象一个调用方法时进行实例化对象。在多线程模式中,考虑到性能和线程安全问题。我们一般选择下面两种比较经典的单例模式,在性能提高的同时,又保证了线程安全。饿汉式没有线程安全问题,懒汉式需要双重锁定解决可能的线程安全问题,下面是对懒汉模式实现线程安全的方法。饿汉式的缺点是类一加载就实例化,提前占用系统资源Doubble check instan...原创 2018-06-28 14:57:24 · 298 阅读 · 0 评论 -
10 ThreadLocal
ThreadLocal概念:线程局部变量,是一种多线程间并发访问量的解决方案,与其synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立剧本,有保障线程安全。从性能上说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全无关的线程安全解决方案,在高并发量或者竞争激烈的场景,使用...原创 2018-06-28 14:35:31 · 211 阅读 · 0 评论 -
09 使用wait/notify模拟Queue
BlockingQueue:顾名思义,首先它是一个队列,并且支持阻塞的机制,阻塞的放入和得到数据。我们要实现LinkedBlockingQueue下面两个简单的方法put和take。Put:把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻塞,直到BlockingQueue里面有空间再继续。Take:取走BlockingQueue里排在首位...原创 2018-06-28 14:34:30 · 236 阅读 · 0 评论 -
08 线程之间通信
2.1 线程之间通信线程之间概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高cpu利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把握与监督。 使用wait/notify方法实现线程间的通信。(注意这个两个方法都是object的类的方法,换句话说java为所有的对...原创 2018-06-28 14:31:44 · 166 阅读 · 0 评论 -
07 volatile关键字的概念
Volatile概念:volatile关键字的主要作用是使变量在多个线程见可见。 Volatile存在原因: 在没有volatile之前是利用加锁机制,从而保证线程安全,数据的一致性,但是这样的效率比较低,因为每次操作只有一个线程执行。 示例:package edu.sdut.thread01; public class MyThread09 extends Thread {/**volati...原创 2018-06-27 20:32:44 · 202 阅读 · 0 评论 -
06 synchronized代码块
使用synchronizd声明的方法在某些情况下是由弊端的,比如A线程调用同步的方法执行一个很长时间的任务,那么B线程就必须等待比较长的时间才能执行,这样的情况下可以使用synchronized代码块去优化代码执行时间,也就是通常所说的减小锁的粒度。 synchronized可以使用任意的Object进行加锁,用法比较灵活:package edu.sdut.thread01; /** * 使用sy...原创 2018-06-27 20:30:39 · 203 阅读 · 0 评论 -
05 synchronized其他概念
Synchonized锁重入:关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到了一个对象的锁后,再次请求此对象时是可以再次得到该对象的锁。示例:package edu.sdut.thread01; /* * synchronized的重入 */public class MyThread05 {public synchronized void m...原创 2018-06-27 20:28:59 · 172 阅读 · 0 评论 -
04 脏读
对于对象的同步和异步的方法,我们在设计自己的程序的时候,一定要考虑的问题整体。不然就会出现数据不一致的错误。示例:/** * 业务整体需要完整的synchronized,保证业务的原子性 * @author Vision_TXG * */public class MyThread04 {private String username ="txgang";private String passwor...原创 2018-06-27 20:27:31 · 199 阅读 · 0 评论 -
03 对象锁的同步和异步
同步:synchronized同步的概念就是共享,如果不是共享的资源就没必要进行同步。异步:asynchronized异步的概念就是独立,相互之间不受任何制约。同步的目的是为了线程安全,其实对于线程安全来说需要满足两个特性:原子性(同步)可见性 示例:/** * 对象锁的同步和异步问题 * @author Vision_TXG * */public class MyThread03 {public...原创 2018-06-27 20:26:13 · 200 阅读 · 0 评论 -
02 多个线程多个锁
多个线程多个锁:多个线程都可以拿自己指定的锁,分别获得锁之后,执行synchronized方法题内容。 示例:/** * 关键字synchronized获得的都是对象锁,而不是把一段代码(方法)当作锁, * 所以代码中哪个线程先执行synchronized关键字的方法,哪个对象持有该方法所属对象的锁 * @author Vision_TXG * */public class MyThread02 ...原创 2018-06-27 20:25:14 · 189 阅读 · 0 评论 -
01 线程安全
线程安全概念:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为。Synchronized:可以在任意对象及方法上枷锁,而加锁的这段代码成为“互斥区”或“临界区”。示例:(在run方法上加锁)public class MyThread01 extends Thread{private int count = 5;//不加synchronized加锁public void ru...原创 2018-06-27 20:23:06 · 181 阅读 · 0 评论 -
请求路径问题
访问路径与资源名称通常的URL资源请求路径由两部分构成:访问路径与资源名称。资源名称指的是要访问资源的直接名称,如:show.jsp,或与要访问资源存在映射关系的间接路径,如show.do而访问路径,则是通过该路径则可以定位到指定的资源,即在URL资源访问路径中除了资源名称以外的其他部分。 http://127.0.0.1:8080/demo/hello.do其中,蓝色部分是资...原创 2018-08-05 14:49:12 · 1126 阅读 · 0 评论