-
复杂度分析
1.概述数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行的更快,以及更加节省存储空间。考量快和省指标是:时间复杂度和空间复杂度。2.大O复杂度表示法int cal(int n){ int sum = 0; int i = 1; for(; i<=n; i++){ sum = sum+1; } return sum; }假设每行代码的执行时间是unit_time,则第2行的...…
-
mysql面试
1.数据库访问的优化法则总体概述1.减少磁盘访问:减少数据库的访问。2.减少网络传输:返回更少数据,减少交互次数。3.减少CPU及内存开销:减少服务器CPU开销。4.增加资源:利用更多资源。1.减少数据库的访问创建并使用正确的索引;通过索引访问数据;优化sql执行计划。2.返回更少的数据,减少交互次数数据分页处理:客户端分页、服务端分页、数据库sql分页。只返回需要的字段。减少交互次数:对增删改进行批处理,使用存储过程、优化业务逻辑。3.减少服务器CPU开销大量复杂运算在客户端处理、使用绑...…
-
Spring
1.什么是SpringSpring是一个轻量级的、开源的javaEE开源框架,它实现了IOC和AOP。2.IOC与DI的区别IOC(反转控制):将对象的创建权交由spring管理,而解放手动创建对象的过程,达到低耦合度的目的。实现原理:将需要的类名配置(注入到)到配置文件中,然后在使用的时候spring利用反射技术动态的生成和创建这个类。DI(依赖注入):在spring创建对象的过程中,把对象的属性注入到类中。依赖注入的三种方式:构造器注入、Setter方法注入、接口注入。3.bean的自...…
-
JVM监控+诊断工具
1.命令行1.jps查看正在运行的java进程jps -l 输出应用程序主类的全类名jps -v 列出虚拟机进程启动时的JVM参数jps -l> a.txt 将内容输入到a.txt文件2.jstat查看JVM统计信息jstat -gc 进程号 查看进程号的JVM信息,包括新生代,老年代,方法区这些空间的大小,和GC次数、时间等。(只输出一次)jstat -gc 进程号 时间间隔(ms) 每隔多少毫秒输出一次进程信息jstat -gc 进程号 时间间隔(ms) 总行数 ...…
-
JVM参数
1.JVM参数选项包括标准参数选项、-X参数选项、-XX参数选项1.标准参数选项(了解)1.-X开头比较稳定,后续版本基本不会变化,直接在DOS窗口中运行java或者java -help可以看到所有的标准选项。2.比如:java -version2.-X参数选项(了解)1.非标准化参数,以-X开头,直接在DOS窗口中运行java -X命令可以看到所有的X选项。 2.JVM的JIT编译模式相关的选项(重点):-Xint:只使用解释器:所有字节码都被解释执行,这个模式的速度是很慢的。-Xcom...…
-
构建基础模块
1.同步类容器:vector和hashTable原理:将他们的状态封装起来,对每个公有方法都进行同步,使得每次只要一个线程能访问容器的状态。同步类容器存在的问题:容器类上常见的符合操作:迭代、跳转、条件运算等,在执行这些符合操作时,其它线程可能会并发的修改容器,会有可能抛出异常(ConcurrentModificationException)。解决办法:通过获得容器类的锁,把复合操作变成原子操作;客户端通过加锁来解决不可靠的迭代问题。缺点:降低并发性。如果不想加锁的话可以采用克隆容器,让复...…
-
redis
1.什么是RedisRedis是一个基于内存的高性能key-value数据库。2.Redis的特点1.性能出色:它的数据操作是在内存中进行,通过定期将一部分数据保存到硬盘上,每秒可以处理超过10万次的读写操作。2.支持多种数据结构:string、list、hash、set、zset,单个value的最大限制是1G(memcached是1M)。3.缺点:数据容量受到内存的限制,不能做海量数据的高性能读写。3.redis相比memcached有哪些优势1.数据结构类型redis比memecac...…
-
类加载机制
1.类加载的过程虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,并最终形成可以被虚拟机直接使用的java类型。过程:加载–>验证–>准备–>解析–>初始化–>使用–>卸载。其中验证、准备、解析这3个称为连接阶段。1.加载1.通过一个类的全限定名来获取定义此类的二进制字节流。2.将这个字节流所代表的静态存储结构转化为方法区运行时的数据结构。3.在内存中生成一个代表这个类的java.lang.class对象,作为方法区这个...…
-
垃圾收集器和内存分配策略
1.对象已死吗?1.判断方法判断一个对象是否死亡的方法:引用计数算法和可达性分析算法。引用计数算法:给对象添加一个引用计数器,有一个地方引用它就给它+1,引用失效就-1,当值为0表示引用已失效。缺点:无法解决对象之间相互引用的问题。可达性分析算法:通过一系列的称为“GC Roots”的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。1.2 可作为GC Roots的对象虚拟机栈(栈帧中的本地变量表)中...…
-
秒懂反射
1.概述反射就是通过对象的字节码生成对应的对象及对象的各个成员。一个类的成员包括:包名package,构造器constructor,属性字段field,普通方法method.因此类的字节码同样是由这四样构成,反射的目的也是获取这四个成员。2.获取字节码的三种方式① :类.Class;② 对象.getClass();③ Class.forName(“类的全路径”);以Student为例子:package com.example.demo.reflect1.study;@Datapublic ...…
-
JVM内存的各个区域
1.概述Java虚拟机运行的数据区域分为:线程隔离的数据区和非线程隔离的数据区。线程隔离的数据区包括:程序计数器、虚拟机栈、本地方法栈。所有线程共享的数据区包括:堆和方法区。2.各个区域介绍2.1.程序计数器程序计数器是当前线程执行的字节码的行号指示器。执行Java方法时,它记录的是正在执行的虚拟机字节码指令的地址。执行native方法时,计数器的值为null。异常:唯一一个不会抛出OutofMemoryError的内存数据区域。注:”native method”:Java调用非Java代...…
-
线程安全性
1.线程安全的定义多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程如何交替运行,并且在主掉代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类时线程安全的。2.如何编写线程安全的代码要编写线程安全的代码,其核心在于对状态访问操作进行管理,特别是对共享的(shared)和可变的(mutable)状态的访问。共享意味着可以由多个线程同时访问,可变意味着它的值在生命周期内可以发生变化。一个对象是否需要时线程安全的,取决于他是否被多个线程访问,要使得他是线程...…
-
HEXO搭建个人博客
经过各种找资料,踩过各种坑,终于使用 hexo 搭建个人博客初步完成了,域名目前用得时 github 的,我的 hexo 是 3.1.1 版本,hexo 不同的版本,很多配置都不一样。好吧,废话不多说了,开始吧。 本篇文章累计了大量评论,和我的一些解答,读者有什么问题可以先看看评论,或者搜下关键字,如果还是有问题可以给我在评论里给我留言,问题很着急的可以加我 QQ:1499065178 ,或者给我发邮件:leopardpan@icloud.com ,都可以,如果你已经搭建完成了,可...…
-
jdk1.8特性--stream
1.描述Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections.翻译成中文就是:这个类用于支持元素流上的功能样式操作,例如集合上的映射还原转换。就是说一般用来操作集合:将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选, 排序,聚合等。对应的包:Package java...…
-
我的第一篇文章
红尘滚滚,爱别离,怨长久。 20 Sep 2018…