- 博客(48)
- 收藏
- 关注
原创 事物的隔离级别,锁
一、事务隔离级别ANSI/ISO SQL标准定义了4中事务隔离级别:未提交读(read uncommitted),提交读(read committed),重复读(repeatable read),串行读(serializable)。对于不同的事务,采用不同的隔离级别分别有不同的结果。不同的隔离级别有不同的现象。主要有下面3种现在:1、脏读(dirty read):一个事务可以读取另一个...
2018-11-08 15:58:33
362
原创 redis面试总结
什么是redis?Redis 是一个基于内存的高性能key-value数据库。 (有空再补充,有理解错误或不足欢迎指正)Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。优点:(1)速度快,每秒可以处理超过 10万次读写操作,是已知性能最...
2018-08-23 17:11:31
307
原创 索引的数据结构及其优化策略
为什么使用B+树而不是红黑树作为索引?一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。磁盘往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放...
2018-08-15 09:54:18
436
原创 InnoDB与MyISAM存储引擎
MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。同样也是一颗B+Tree,data域保存数据记录的地址。因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key...
2018-08-14 20:10:07
208
原创 锁
乐观锁:它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。数据版本,为数据增加的一个版本标识。当读取数据时,将版本标识的值一同读出,数据每更新一次,同时对版本标识进行更新。当我们提交更新的时候,判断数据库...
2018-08-14 17:11:24
165
原创 springboot自动配置原理
自动配置SpringSpring Boot会根据在类路径中的jar包,类,为jar包里的类自动配置beanSpringBoot为我们提供了简化企业级开发绝大多数场景的start pom,只要使用了应用场景所需要的start pom,相关的技术配置将会消除,就可以得到spring Boot为我们提供的自动配置的bean*************************************...
2018-08-09 10:01:38
294
原创 执行引擎
执行引擎是跟操作系统相关的,.class都是JVM指令,JVM就是让执行引擎干活的命令。执行引擎在执行java代码的时候都会有解释执行和编译执行两种选择。解释执行:对源语言写成的源语句进行一句一句的翻译,翻译一句就提交给计算机执行一句,并不会形成目标程序。它的优点是翻译本身并不费事。它的缺点是运行速度慢,比如当程序中存在循环条件时,循环体内的语句就会被多次的翻译,从而影响运行速度...
2018-08-03 14:09:13
2198
原创 类加载器
java代码在编译后会变成java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终要转化为汇编指令在CPU上执行类装载器ClassLoader类加载概念:通过一个类的全限定名来获取描述此类的二进制字节流,每一个类加载器都有一个独立的类名称空间,比较2个类是否相等,只有在这2个类是由同一个类加载器加载的前提下才有意义。ClassLoader是一个抽象类ClassLoade...
2018-08-01 14:29:13
128
原创 class文件结构
class文件的定义class文件是一组以8位字节为基础的二级制流。各个数据项严格按照顺序紧凑的排列在class文件中,中间没有添加任何分隔符,整个class文件中存储的内容几乎全部都是程序运行的必要的数据,没有空隙存在当遇到8位以上的空间的数据项时,则会按照高位在前方的方式分割成若干个8位字节进行存储class文件有2种数据类型,分别是无符号数和表无符号数属于基本数据类型,以u1...
2018-07-25 20:40:12
163
原创 数据库连接池种类及性能
现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。开源数据库连接池:1 dbcpdbcp可能是使用最多的开源连接池这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有优缺点:稳定性还是可以,不过速度稍...
2018-07-25 16:13:48
5255
1
原创 虚拟机监控工具
JDK的bin目录下提供了一些用于监视虚拟机和故障处理的工具,在cmd下输入相关命令就能打印出,虚拟机参数虚拟机进程状态工具jpsjps java process stasus类似于任务管理器,专门查看java任务的,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类,(main函数所在的类)名称。以及这些进程的本地虚拟机唯一ID lvmid举例子jsp -l : 输出主类的全名,...
2018-07-25 15:10:07
857
原创 内存分配策略
内存分配主要遵循以下策略:优先分配到eden区域大对象直接分配到老年代长期存活的对象分配到老年代空间分配担保动态对象年龄判断*****************************************************************************************************************************...
2018-07-23 15:04:21
297
原创 逃逸分析与栈上分配
内存管理主要分为两部分:内存分配、垃圾回收逃逸对象:对象的作用于仅在当前方法中有效,称为没有发生逃逸,反之就认为是逃逸对象发生逃逸情景举例:1.方法返回对象public static StringBuffer craeteStringBuffer(String s1, String s2) { StringBuffer sb = new StringBuffer(...
2018-07-19 20:47:37
631
原创 JVM对象的创建、结构、访问定位
1.对象的创建初始化对象默认值问题:臭象数据类型比如Date,String默认值是null;基本数据类型默认值是0;布尔类型默认false;2.对象的结构:对象的结构包括Header(对象头),instanceDate,padding对象头包括:自身运行时数据(哈希值,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳)类型指针:对象指向类的元...
2018-07-19 15:37:44
212
原创 虚拟机五大内存区域
java的运行时数据区分为:线程独占区、线程共享区线程独占区包括:程序技术器、虚拟机栈(我们常说的那个栈)、本地方法栈; 虚拟机栈是为执行java方法服务的;本地方法栈是为了虚拟机执行native方法服务线程共享区包括:java堆、方法区1.程序技术器程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行...
2018-07-19 13:14:07
1126
原创 Object类中的方法及其作用
Object类有12个成员方法,按照用途可以分为以下几种 1,构造函数 2,hashCode和equale函数用来判断对象是否相同, 3,wait(),wait(long),wait(long,int),notify(),notifyAll() 4,toString()返回该对象的字符串表示,一般需要重写和getClass() 返回一个对象的运行时类,获得类型的信息,与java反射机制相关5,cl...
2018-07-12 14:42:16
809
1
原创 枚举类型学习
枚举类型1.什么是枚举类型类的实例个数是有限的,但又不是很多。枚举像一个类,又像一个数组。使用Enum声明的枚举,反编译后发现是final修饰的class,所以他不可以有子类2.枚举类型有什么不用1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。 2.所有枚举值都是public , static , final的。3.枚举类型写法举例写法一:public e...
2018-07-12 11:12:42
220
原创 GC垃圾回收
GC回收有2种算法:一种是引用计数器法,另一种是可达性分析算法java中 GC的对象是堆空间和永久区1.引用计数器法老牌垃圾回收算法:通过引用计数来回收垃圾,只要有一个人使用就再这个对象上加1,有人释放了这个对象就减1,如果引用计数为0,则对象A就会被回收引用计数问题:(没有被java采用)引用和去引用都伴随着加法和减法,影响性能很难处理循环引用,即A引用B,B引用C,C引...
2018-07-11 11:10:11
683
原创 类加载顺序
类的加载链接初始化都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供高度的灵活性。1.加载:装载类的第一个阶段取得类的二进制流,从哪里获取是非常广泛的,可以从压缩包,网络读取,也可以运行时计算生成如动态代理技术,由其他文件生成,如由JSP文件生成对应的class类转为方法区数据结构在Java堆中生成对应的java.lang.Cl...
2018-07-11 11:10:05
167
原创 JAVA的内存管理与内存泄漏
Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历与各位网友分享解决这些问题的办法。作为Internet最流行的编程语言之一,Java现正非常流行。我们的网络应用程序就主要采用Java语言开发,大体上分为客户端、服务器和数据库三个层次。在进入测试过程...
2018-07-11 11:10:00
180
原创 rabbit mq理论学习
amqp是rabbitmq的java 包1.1、rabbitMQ的优点(适用范围)1. 基于erlang语言开发具有高可用高并发的优点,适合集群服务器。2. 健壮、稳定、易用、跨平台、支持多种语言、文档齐全。3. 有消息确认机制和持久化机制,可靠性高。4. 开源其他MQ的优势:1. Apache ActiveMQ曝光率最高,但是可能会丢消息。2. ZeroMQ延迟很低、支持灵活拓扑,但是不支持消息...
2018-07-11 11:09:48
279
原创 消息中间件(1)
定义:消息中间件是指在消息传输过程中保存消息的容器,消息中间件将消息从它的源中继到他的目标时充当中间人的作用消息中间件的主要目的是提供路由并保证消息的传递,如果发送消息时接受者不可用,消息队列会保留消息,直到可以成功传递它为止,当然,消息队列保存消息也是有时间期限的。特点:采用异步处理模式:消息发送者可以发送一个消息而无需等待响应,消息发送者将消息发送到一个通道上,消息接受者则订阅或者是监听该通道...
2018-07-11 11:09:42
535
原创 JVM 基础(1)
JVM概念2004年发布JDK1.5:泛型,注解,装箱,枚举,可变长的参数,foreach循环PC寄存器:每一个线程拥有一个PC寄存器;在线程创建时创建纸箱下一条指令的地址执行本地方法时,PC的值为undifined(未定义的)方法区:保存装载的类的原信息 对类进行描述通常和永久区关联在一起,保存一些相对不变的信息,类的信息一般在运行的过程中不会变java堆:和程序开发密切相关应用系统对象都保存...
2018-07-11 11:09:32
124
原创 java内存分配原理
栈、堆、常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,详细讲解Java内存分配方面的知识。Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:◆寄存器:我们在程序中...
2018-07-11 11:09:24
158
原创 springboot定时任务
在SpringBoot项目中,我们可以很优雅的使用注解来实现定时任务在主类上使用@EnableScheduling注解开启对定时任务的支持,然后启动项目@Scheduled(cron="0 0/2 * * * ?") //每2分钟执行一次 public void statusCheck() { //检查redis里面 key=imageList剩余的生存时间 ...
2018-07-11 11:09:14
412
原创 三级联动菜单
首先第一个菜单的信息是在后台就需要传递进来的,这里面指的是省的信息,一下是JSP页面,原理就是,第一个菜单onchange的时候,加载第二个人菜单的信息和第三个菜单的信息,当第二个菜单onchange的时候加载地三个菜单的信息 <td colspan="3">省: <select style="width: 20%;" id="pre"...
2018-07-11 11:09:08
167
原创 springboot核心功能
spring容器中每一个实例bean默认是单例的,即一个容器中只有一个bean实例,相当于@Scope("singleton"),也可以配置成为每次调用的时候生成一个实例等其他模式。springboot核心功能:1.独立运行的spring 项目Springboot可以以jar包的形式独立运行,运行一个Spring boot 项目只需要通过java -jar xx.jar来运行2.内嵌servlet...
2018-07-11 11:09:01
1324
原创 springboot项目启动时加载数据
实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。 为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。很简单,只需要一个类就可以,无需其他配置。 创建实现接口 CommandLineRunner 的类@Componentpublic class StartupLoading implements...
2018-07-11 11:08:55
6283
转载 线程池的几种状态
线程池的5种状态:Running、ShutDown、Stop、Tidying、Terminated。1、RUNNING(1) 状态说明:线程池处在RUNNING状态时,能够接收新任务,以及对已添加的任务进行处理。 (02) 状态切换:线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建,就处于RUNNING状态,并且线程池中的任务数为0!private final AtomicInte...
2018-07-11 11:08:24
16153
2
原创 Executor框架
Executor是最顶层的接口Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周...
2018-07-11 11:08:14
183
原创 @Transient注解
不跟数据库表做映射 就是表中没有这个字段@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.在项目查了下,mongodb中确实没有此字段,因此也适用于mongodb...
2018-07-11 11:08:08
206
原创 Future、Callable
Java多线程编程中,经常使用的Thread的Runnable()虽然被经常使用,但其有一个弊端,就是因为无法直接获取该线程的返回值,因为Runnable内的run方法,被定义为void类型,如果开发者需要在线程中处理耗时操作并获得结果,那么必须自己实现一套结果获取的途径,这其实增加了开发者的代码工作量,也可能会因为对线程的不熟悉,造成不必要的代码错误(线程的同步等等问题)。可是,绝大多情况跑完J...
2018-07-11 11:08:03
117
原创 线程池
线程池的优势:1.降低资源消耗,通过重复利用已创建的线程降低线程的创建和销毁造成的消耗2.提高响应速度,当任务到达时,任务可以不需要等线程创建就能立即执行,线程已经创建好了,等待执行3.提高线程的可管理性,使用线程池可以统一的调优、分配、和监控线程原理:当任务到来时,把任务给线程池,由线程池去调度线程执行任务提交线程任务既可以用execute()又可以用submit()方法。下面创建一个线程池当队...
2018-07-11 11:07:56
210
原创 内部类
内部类的写法public void transform(final List<QposOrderDTO> data, final QposOrderContext context) throws InterruptedException { Callable<List<Order>> task = new Callable<List<Orde...
2018-07-11 11:07:45
270
原创 decode语句的多种用法
含义解释: (类似于if else if .. else) decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 用法1:转译decode(t.term_status,'BIND','已绑定','FREE','空闲','OCCUPY','已占用','DISTRIBUTE','已分配(办事处)','DISAREA','已分配(直营)','ABAND...
2018-07-11 11:07:39
7721
原创 case when语句(SQL)多种用法
case具有两种格式。简单case函数和case搜索函数。 --简单case函数case sex when '1' then '男' when '2' then '女’ else '其他' end--case搜索函数case when sex = '1' then '男' when sex = '2' then '女' else '其他' end ...
2018-07-11 11:07:15
19931
原创 oracle主键生成策略
创建序列 创建序列 语法 CREATE SEQUENCE 序列名 [相关参数] 参数说明 INCREMENT BY :序列变化的步进,负值表示递减。(默认1) START WITH:序列的初始值 。(默认1) MAXvalue:序列可生成的最大值。(默认不限制最大值,NOMAXVALUE) MINVALUE:序列可生成的最小值。(默认不限制最小值,NOMINVALUE) CYCLE...
2018-07-11 11:07:04
3664
原创 Eurake注册中心
eureka找到了 有了服务端server用于服务注册与发现,系统中其他的微服务使用客户端client链接服务端,并且维持心跳连接,server端会不断的检查client端是否存活,心跳检测,健康检查,负载均衡功能eureka.client.fetch-registry=false一个服务可以即是客户端又是服务器端,加上如上的配置就可以,让这个服务只是一个服务器端服务端就像是老师的点名册,记录每...
2018-07-11 11:04:59
5648
1
原创 对象序列化
什么是序列化:序列化是一种将对象以一连串的字节描述的过程;Java平台允许我们在内存中创建可复用的Java对象,使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。反序列化是一种将这些字节重建成一个对象的过程。序列化的必要性:对象的序列化主要有两种...
2018-07-11 11:04:30
154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人