losemyfuture的博客
对Java技术栈方面的一些小笔记与平时学习过程中的一些记录
losemyfuture
这个作者很懒,什么都没留下…
展开
-
Java多线程之Java内存模型
如果要了解Java内存模型,就得对多线程的三大特性有初步的了解。1、原子性:独一无二、一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。比如i = i+1;其中就包括,读取i的值,计算i,写入i。这行代码在Java中是不具备原子性的,则多线程运行肯定会出问题,所以也需要我们使用同步和lock这些东西来确保这个特性了。原子性其实就是保证数据一致、线程安全。2...原创 2018-07-23 18:25:16 · 125 阅读 · 0 评论 -
java多线程之volatile关键字
public class ThreadVolatile extends Thread { public boolean flag=true; @Override public void run() { System.out.println("子线程begin。。。。。。"); while(flag){} System.ou...原创 2018-07-23 20:05:44 · 192 阅读 · 0 评论 -
多线程之间通讯JDK1.5-Lock
synchronized:代码开始上锁,代码结束时释放锁;内置锁、自动化的、效率低、扩展性不高(不够灵活);JDK1.5并发包Lock锁 --保证线程安全问题,属于手动挡,手动开始上锁,手动释放锁,灵活性高;Lock 接口与 synchronized 关键字的区别Lock 接口可以尝试非阻塞地获取锁 当前线程尝试获取锁。如果这一时刻锁没有被其他线程获取到,则成功获取并持有锁。Lock...原创 2018-07-24 04:32:49 · 113 阅读 · 0 评论 -
Java多线程之并发包,并发队列
目录1 并发包1.1同步容器类1.1.1Vector与ArrayList区别1.1.2HasTable与HasMap1.1.3 synchronizedMap1.1.4 ConcurrentHashMap1.1.5 CountDownLatch1.1.6 CyclicBarrier1.1.6 Semaphore2 并发队列2.1 Concur...原创 2018-07-25 04:06:19 · 759 阅读 · 0 评论 -
Java多线程之线程池原理剖析,锁的深度化
目录 1 线程池1.1 好处1.2 作用1.3 线程池创建方式1.4 原理分析1.5 线程池合理配置2 锁的深度化2.1 悲观锁2.2 乐观锁2.3 重入锁2.4 读写锁2.5 CAS无锁机制2.6 自旋锁2.7 分布式锁1 线程池1.1 好处1)降低资源消耗,重复利用已经创建好的线程,降低线程创建和销毁造成的消耗2)提高...原创 2018-07-27 02:55:30 · 4825 阅读 · 0 评论 -
数据交换格式
1 数据交换格式数据交换格式(报文/参数列表),就是客户端与服务器常用的数据交换格式xml,json,html等,常用于面向接口开发。json:一种轻量级数据交换格式。移动端(安卓、IOS)通讯方式采用http协议+JSON格式 走restful风格。很多互联网项目都采用Http协议+JSON。占用宽带小xml:可扩展的标记语言,重量级交换格式。因为xml比较重WebServic...原创 2018-07-27 04:30:18 · 2632 阅读 · 0 评论 -
Java反射机制
目录 1 反射机制1.1反射机制的作用1.3 反射机制的应用场景1.4 反射机制获取类有三种方法1.5 反射创建对象的方式1.6 禁止使用反射机制初始化1.7 反射创建api1.8 样例1.9 手写spring IOC1 反射机制就是正在运行动态获取当前类的所有信息,类可以不用new,使用Java反射机制帮你初始化。类的私有属性也可以用Java的反射...原创 2018-07-27 05:51:21 · 277 阅读 · 0 评论 -
自定义注解
目录 1注解1.1作用1.2 注解1.3 内置注解1.4 自定义注解1.5 样例——实现ORM框架映射1注解1.1作用为了简化代码,提高开发效率。1.2 注解jdk1.5新增新技术,注解。很多框架为了简化代码,都会提供有些注解。可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件。注解不会也不能影响代码的实际逻辑,仅...原创 2018-07-28 01:52:11 · 129 阅读 · 0 评论 -
常用设计模式
目录 1 设计模式概述1.1 设计模式的六大原则1.1.1、开闭原则(Open Close Principle)——扩展性、易于修改1.1.2、里氏代换原则(Liskov Substitution Principle)——面向对象1.1.3、依赖倒转原则(Dependence Inversion Principle)——面向接口编程1.1.4、接口隔离原则(Interf...原创 2018-07-28 03:30:07 · 157 阅读 · 0 评论 -
Socket网络编程
目录 1 网络模型1.1 IP地址与域名1.2 端口的概念1.3 网络模型图2 Socket入门2.1 什么是Socket2.2 TCP和UDP区别2.3 UDP协议样例2.4 TCP2.4.1 TCP报文格式2.4.2 TCP三次握手2.4.3 四次挥手2.4.4 三次握手和四次挥手面试问题2.4.5TCP的滑动窗口机制2.4.6 ...原创 2018-07-29 05:49:00 · 6804 阅读 · 1 评论 -
NIO编程
1 NIO概述Java NIO(New IO)是一个可替代Java IO API(从Java1.4开始),JAVA NIO提供了与标准IO不同的工作方式。Java NIO:Channels and Buffers(通道和缓冲区)标准的IO基于字节流或者字符流进行操作,而NIO基于通道和缓冲区进行操作,数据是总是从通道读取的缓冲区中,或者从缓冲区写入到通道中。Java NIO:Non...原创 2018-08-03 05:09:27 · 6240 阅读 · 2 评论 -
netty编程
目录1 netty概述2 Netty服务端3 Netty客户端4 长连接和短连接区别5 粘包/拆包怎么解决呢?6 序列化与自定义序列化协议8 几种流行的序列化协议比较8.1XML8.2 JSON8.3 Fastjson8.4 Thrift8.5 Avro8.6 Protobuf8.7 其它8.8 性能对比图解选型建议1 net...原创 2018-08-04 13:37:30 · 392 阅读 · 0 评论 -
垃圾回收机制算法
1 垃圾回收机制概述Java垃圾回收机制其实就是GC线程不定时的回收堆内存中的不可达对象。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。1.1 垃圾回收过程注意:不可达对象并不会马上就被直接回收,而是至少要经过两次标记的过程。 第一次被标记过的对象,会检查该对象是否重写了f...原创 2018-08-06 07:05:40 · 4949 阅读 · 0 评论 -
Web开发入门
1 Web基础1.1 javaee和javasejavase: java桌面程序,控制台控制,,多线程,IO,网络(socket), gui界面javaee:java web程序。浏览器控制1.2 软件的结构一般软件结构有两种B/S和C/S两种。C/S(Client-Server 桌面应用程序->客户端-服务端):特征:需要下载安装包才能运行,服务端升级时客户端也...原创 2018-08-06 09:54:45 · 180 阅读 · 0 评论 -
Http协议入门
1 什么是http协议http协议:浏览器客户端和服务器端之间数据传输的格式规范1.1 Http请求GET /hello HTTP/1.1 -请求行Host: localhost:8080 --请求头(多个key-value对象)User-Agent:Mozilla/5.0 (Linux; Android 6.0;...原创 2018-08-07 14:43:12 · 508 阅读 · 0 评论 -
Web开发高级技术
1 http长连接与短连接HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。1.1 如何理解HTTP协议是无状态的HTTP协议是无状...原创 2018-08-09 03:52:46 · 5307 阅读 · 0 评论 -
Mysql优化
1 数据库设计要合理(3F)为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。关系型数据库中这种规则称为范式。1.1 三大范式1.1.1 第一范式1NF是对属性的原子性约束,要求属性列具有原子性,不可再分解;id name address 1 xiaoming 广州市番禺区大山村 以上图User表为例,所谓的原子性其实取决...原创 2018-08-11 10:48:09 · 347 阅读 · 0 评论 -
mybatis基础
1、mybatis简单例子MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数库中的记录.mybatis和hibernate区别...原创 2018-08-11 14:22:34 · 358 阅读 · 0 评论 -
spring IOC和AOP
1 Spring概述企业级 Java 应用程序开发框架。开源的 Java 平台。轻量级的框架,其基础版本只有 2 MB 左右的大小。扩展性好。我的理解:Spring是一个解决bean(对象)的创建以及与其他对象之间依赖关系的一种框架(容器)。且可以和洽谈的一些框架进行整合使用,例如struts2、mybatis、hibernate等。那么我们为什么需要这个东西?这个就要说到...原创 2018-08-12 21:59:06 · 261 阅读 · 0 评论 -
Spring事务
1、事务概述事务是一系列的动作,他们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会会滚到最开始的状态,仿佛什么都没发生过一样,用来保证数据的完整性和一致性。特性:1、原子性:事务中包含的所有操作要么全部成功,要么全部失败回滚,不可再分。2、一致性:就是说一个事务执行之前和执行之后都必须处于一个一致性状态。,比如a和b两个用户,a向b转账后,...原创 2018-08-13 10:05:37 · 135 阅读 · 0 评论 -
MySQL explain关键字详解
1、explain输出列mysql> explain select tm.* from ((select * from t1) union (select * from t2) union (select * from t3)) tm;+------+--------------+--------------+------------+------+---------------+--...原创 2019-10-08 17:00:26 · 322 阅读 · 0 评论 -
MYSQL 表优化
一、单表优化1、准备create table if not EXISTS `article`( `id` int(10) UNSIGNED not NULL PRIMARY key AUTO_INCREMENT, `author_id` int(10) UNSIGNED not NULL, `category_id` int(10) UNSIGNED not NULL, `views`...原创 2019-10-08 17:02:08 · 222 阅读 · 0 评论 -
MYSQL索引优化建议
1、索引失效1.1 基本原则全值匹配我最爱最佳左前缀法则,对于多列索引,查询从最左前列开始,不跳过索引中的列不在索引列上做任何操作,计算、函数、自动/手动类型转换),否则会导致索引失效导致全表扫描存储引擎不能使用索引中范围条件右边的列尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *mysql在使用不等于(!=或者<>)的时候无法使用索引...原创 2019-10-08 17:03:46 · 221 阅读 · 0 评论 -
MYSQL锁机制
1、准备create table mylock( id int not null primary key auto_increment, `name` varchar(20)) ENGINE myisam;insert into mylock(name) values ('a');insert into mylock(name) values ('b');insert into m...原创 2019-10-08 17:04:22 · 167 阅读 · 0 评论 -
MYSQL行与列限制
1、列数量限制从mysql官网可知每个数据表限制列数量为4096,官网也说了一般比这个更小,取决于以下几个因素:最大行大小会影响表的列数,因为总的列长度不能超过该大小存储引擎、字符集、排列方式、存储格式也有一定的影响功能性的key也会有影响,比如索引就会生成一个隐含的虚拟列,其他也是如此,对列数量也有一定限制2、行大小限制mysql内部机制允许每一个表有一个最大的行大小为6553...原创 2019-10-08 17:55:39 · 4096 阅读 · 0 评论