自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不羁朔风的博客

自学道路上的一些经验和笔记

  • 博客(126)
  • 资源 (5)
  • 收藏
  • 关注

原创 redis面试题大全

启动redis前端模式启动的缺点是ssh命令窗口关闭则redis-server程序结束,不推荐使用此方法redis的概述服务器处理数据的速度,与网站速度息息相关. 但是如果网站的访问量非常大的时候,我们的数据库压力就变大了。数据库的连接池、处理数据的能力就会面临很大的挑战。我们日常使用的关系型数据库中的数据,全部存储在我们部署数据库的机器的硬盘中。缓存就是在内存中存储的数据备份,当...

2018-11-12 10:55:46 57433 4

原创 数据库的优化思路

①合理选择数据库引擎②sql语句的优化③索引的优化④分库分表分区⑤预处理⑥读写分离⑦数据库表结构设计(1)尽量使用数字型字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。(2)尽可能的使用 varchar 代替 char因为首先变长字段存...

2018-11-11 09:31:03 552 1

原创 mysql的分页

mysql提供了分页的函数limit m,n 其中m代表起始行,n代表总行数.我们还可以根据实际情况来改写我们的分页语句.如果只给定一个参数,表示记录数查询5行记录,起始行从0开始(即从第一行开始)SELECT * FROM emp LIMIT 0, 5;  =>等价于 select * from emp limit 5;客户端通过传递start(页码),pageSize(每页显...

2018-11-11 09:30:11 5295

原创 InnoDB的关键特性

1.插入缓冲,主要是针对非主键索引的插入和更新操作,如果是主键索引,顺序的插入就可以了,数据页的存放还是主键id的执行顺序,但是非主键索引,叶子节点的插入不再是顺序的,这个时候需要离散的访问非聚集索引,插入性能会变得很低。 插入缓冲的作用就是,对于非聚集索引的插入和更新,不是每一次直接插入索引页中,而是先判断非聚集索引页是否里,如果存在,那么直接插入,不存在就先插入到缓冲池中,然后以一定的...

2018-11-11 09:29:43 410

原创 MySql何时用MyISAM何时用InnoDB

 MySql何时用MyISAM何时用InnoDBMyISAM和InnoDB是MySQL提供的两种搜索引擎MyISAM和InnoDB的区别①InnoDB支持事务与外键和行级锁,MyISAM不支持(最主要的差别)②MyISAM读性能要优于InnoDB,除了针对索引的update操作,MyISAM的写性能可能低于InnoDB,其他操作MyISAM的写性能也是优于InnoDB的,而且可...

2018-11-11 09:28:59 6079

原创 数据库索引

引言说白了,数据库的索引问题就是查找问题数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据.索引的实现通常使用B树和变种的B+树(mysql常用的索引就是B+树)除了数据之外,数据库系统还维护为满足特定查找算法的数据结构,这些数据结构以某种方式引用数据.这种数据结构就是索引创建索引的好处①通过创建索引,可以在查询的过程中,提高系统的性能②...

2018-11-11 09:27:25 66059 5

原创 B树(或B-树)和B+树和B*树

树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下根据平衡二叉树的启发,自然就想到平衡多路查找树结构,即B树结构(后面,我们将看到,B树的各种操作能使B树保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率)。为什么说B+tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?1) B+tree的磁盘读写代价更低B+tree的内部结点...

2018-11-11 09:16:04 311

原创 数据库事务的特性和隔离级别

数据库事务的四大特性(ACID)原子性(Atomicity)事务中的操作要么全部成功,要么失败回滚一致性(Consistency)一个事务执行之前和执行之后都必须处于一致性状态。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。隔离性(Isolation)两...

2018-11-11 09:15:10 414

原创 mysql中char和varchar和text的区别

①CHAR是一种固定长度的类型,适合用在身份证号码、手机号码等定。,VARCHAR则是一种可变长度的类型。适合用在长度可变的属性。 text不设置长度, 当不知道属性的最大长度时,适合用text。②按照查询速度: char最快, varchar次之,text最慢。也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字...

2018-11-11 09:13:23 14373

原创 ThreadLocal详解

ThreadLocal概要我们可以使用synchorinized 关键字来为变量加锁以解决线程安全问题,从而限制只能有一个线程来使用此变量,但是加锁会大大影响程序执行效率ThreadLocal是线程局部变量(从线程的角度看,目标变量就像是线程的本地变量), 通常是类中的 private static 字段. 当ThreadLocal维护变量的时候,为每一个使用该变量的线程都提供一个独立的变...

2018-11-10 19:48:05 361

原创 如何实现自己的线程池

首先,在服务启动的时候,我们可以启动好几个线程,并用一个容器(如线程池)来管理这些线程。当请求到来时,可以从池中取一个线程出来,执行任务(通常是对请求的响应),当任务结束后,再将这个线程放入池中备用;如果请求到来而池中没有空闲的线程,该请求需要排队等候。最后,当服务关闭时销毁该池即可。public interface Pool {//获取工作线程public abstract Pool...

2018-11-10 19:45:04 1100

原创 如何合理配置线程池的大小

2018-11-10 19:44:18 1040

原创 ThreadPoolExecutor详解

构造器参数分析第四个构造器源码corePoolSize:核心池的大小默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数数目少于corePoolSize时,有新任务进来就新建一个线程,即使有的线程没事干,当线程池中的线程数目达到corePoolSize时,将到达的任务放在缓存队列中可以理解为:队列没满时,线程最大...

2018-11-10 19:43:47 1370

原创 线程池的继承体系和处理流程(简单易懂)

线程池的继承体系类分层结构接口分层结构线程池的处理流程

2018-11-10 19:38:21 691

原创 java中常见的线程池

Executor接口表示线程池,它的execute(Runnable task)方法用来执行Runnable类型的任务,ExecutorService是Executor的子接口,声明了管理线程池的一些方法Java.util.concurrent.Executors类包含了一些静态方法,它们负责生成各种类型的线程池实例(ExecutorService) ①newSingleThrea...

2018-11-10 19:36:44 232

原创 线程池的优点

①降低资源消耗-->重复利用已经创建的线程②提高响应速度-->当任务到达时,任务可以直接从线程池获取线程,而不需要创建新的线程③提高线程的可管理性-->使用线程池可以统一分配,调优和监控,例如可以根据系统的承受能力,调增线程池中工作线程的数目...

2018-11-10 19:35:52 692

原创 线程数设多少合适

①工作线程数是不是设置的越大越好?        回答:肯定不是的        1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义        2)线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低②如果CPU是单核,设置多线程有意义么,能提高并发性能么?        回答:即使是单核,使用多线程也是有意义的       ...

2018-11-10 19:35:09 7238

原创 谈谈你对CountDownLatch的理解

CountDownLatch是java.util.concurrent包中一个工具类。它能够使一个或者多个线程等待另外一些线程完成各自的工作之后,再继续执行使用CountDownLatch的一些情景:①需要去解析一个Excel的数据,为了更快的解析,每个sheet都使用一个线程进行解析,但是最后汇总数据的工作需要等待每个sheet的解析工作完成之后才能进行②开启多个线程分块传输一个大数...

2018-11-10 19:34:42 990

原创 LongAdder和AtomicLong的区别

AtomicLong的原理是依靠底层的cas来保障原子性的更新数据,在要添加或者减少的时候,会使用自循(CLH)方式不断地cas到特定的值,从而达到更新数据的目的。然而在线程竞争激烈的情况下,自循往往浪费很多计算资源才能达成预期效果。 面对自循的缺点,jdk1.8推出了LongAdder类,他的实现方式有点像ConcurrentHashMap一样,采用空间换时间的方式,提高在线程竞争激烈的...

2018-11-10 19:34:15 1351

原创 谈谈你对AtomicInteger的理解

AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减。十分适合高并发情况下的使用 对于全局变量的数值类型操作 num++,若没有加synchronized关键字则是线程不安全的,num++解析为num=num+1,明显,这个操作不具备原子性,多线程时必然会出现问题。测试下:输出的结果为count: 9992,这个值不定,每次测试都可能不一样,很...

2018-11-09 08:15:17 5971 2

原创 如何线程安全地实现一个计数器

i++是线程安全的吗 i++和++i的线程安全分为两种情况:1、如果i是局部变量(在方法里定义的),那么是线程安全的。因为局部变量是线程私有的,别的线程访问不到,其实也可以说没有线程安不安全之说,因为别的线程对他造不成影响。2、如果i是全局变量(类的成员变量),那么是线程不安全的。因为如果是全局变量的话,同一进程中的不同线程都有可能访问到。如何线程安全地实现一个计数器或者这...

2018-11-09 08:13:50 4069

原创 ReentrantLock可重入锁

ReentraantLock是通过一个FIFO的等待队列来管理获取该锁所有线程的。在“公平锁”的机制下,线程依次排队获取锁(先等待的线程先获得锁);而“非公平锁”在锁是可获取状态时,不管自己是不是在队列的开头都会获取锁。 ReentrantLock和synchronized的相同点①ReentrantLock和synchronized一样都具有可重入性ReentrantLock和s...

2018-11-09 08:12:10 826

原创 synchronized和Lock有什么区别

java语言中提供了两种锁机制来实现对某个共享资源的同步:synchronized和Lock.其中synchronized使用Object对象本身的notify,wait和notifyAll来实现线程之间的调度.而Lock可以使用Condition进程线程之间的调度①用法不同synchronized可以加在方法上,也可以加在特定的代码块中,括号中表示需要锁的对象Lock需要显式地指定起...

2018-11-09 08:11:06 1448

原创 终止线程的方法

在java语言中,可以使用stop()方法和suspend()方法来终止线程的执行.当使用Thread.stop()来终止线程时,它会释放已经锁定的所有监视资源,具有不安全性suspend()方法不会释放锁,容易发生死锁(两个或者两个以上进程在执行过程中,因争夺资源而造成进程间互相等待的现象,如果无外力干涉,它们将无法推进)问题鉴于以上两种方法的不安全性,java语言已经不建议使用以上...

2018-11-09 08:10:27 396

原创 sleep和yield方法的区别

①sleep方法给其他线程运行机会时不考虑线程的优先级,因此会给低线程优先级运行的机会,而yield方法只会给相同优先级或者更高优先级线程运行的机会②线程执行sleep()方法后转入阻塞状态,所以,执行sleep()方法的线程在指定的时间内不会被执行,而yield()方法只是使当前线程重新回到可执行状态,所以执行yield()方法的线程可能在进入可执行状态后马上又被执行③sleep()方法...

2018-11-09 08:09:44 7220

原创 sleep和wait方法的区别

①原理不同sleep()方法是Thread类的静态方法,它会使线程的执行暂停一段时间,把执行机会让给其他线程,等倒计时时间一到,此线程会自动苏醒wait()是Object类的方法,用于线程间的通信,使当前拥有锁的进程等待,直到其他线程调用notify()方法才醒过来②对锁的处理机制不同调用sleep()方法不释放锁(因为它不释放锁,所以容易导致死锁问题的发生,所以一般情况下,不推荐...

2018-11-09 08:09:08 430

原创 同步异步的区别

多个线程对同一个资源进行写操作,当线程A需要使用某个资源时,如果这个资源正在被B使用,同步机制会让A一直等待下去,直到线程B结束对该资源的使用后,线程A才能使用这个资源.由此可见,同步机制能够保证线程的安全如何实现同步操作呢?必须获得每一个线程对象的锁.获得它可以保证在同一时刻只有一个线程能够进入临界区(访问相同资源的代码块),并且在这个锁释放之前,其他线程不能进入这个临界区.如果还有线程...

2018-11-09 08:07:15 856

原创 线程调度的方式(简单易懂)

1.分时调度所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。2.抢占式调度优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。...

2018-11-09 08:06:30 6257

转载 线程的生命周期(线程的状态)

有执行资格:线程已经准备好有执行权:抢到了CPU的执行权在java语言中,线程有四种状态:运行,就绪,阻塞(或者说挂起)和结束(或者说死亡)

2018-11-09 08:05:20 178

原创 进程和线程的区别

①进程指正在运行的程序,是操作系统进行资源分配和调度的基本单位;线程是CPU调度的基本单位.②一个程序运行后至少有一个进程,一个进程中可以包含多个线程③进程具有自己独立的内存空间,各个线程之间共享进程的内存空间(堆和方法区)和一些进程级的资源(比如打开的文件),但是各个线程拥有自己的栈空间....

2018-11-08 21:54:17 184

原创 线程间的通信

在Java中主要通过等待唤醒机制来实现线程间的通信等待唤醒机制所涉及到的方法:wait() :等待,将正在执行的线程释放其执行资格 和 执行权,并存储到线程池中。 notify():唤醒,唤醒线程池中被wait()的线程,一次唤醒一个,而且是任意的。 notifyAll(): 唤醒全部:可以将线程池中的所有wait() 线程都唤醒。其实,所谓唤醒的意思就是让 线程池中的线程具备执行资...

2018-11-08 21:53:23 153

原创 进程间的通信机制

进程间的通信机制套接字:套接字socket,由目标计算机的IP地址和进程的端口号组成共享内存:由一个进程创建,但是多个进程可以访问消息队列:存放在内核中的消息链表信号:向接收进程通知某个事件已经发生信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源管道:半双工的通信方式,数据只能单向流动,...

2018-11-08 21:52:21 633

原创 进程的调度

  为什么要进行进程的调度充分,高效,及时,公平利用CPU的资源可以在内存中存放数目远大于CPU数的进程进程调度的方式①非抢占式调度:一旦占用CPU,直到进程执行完成或者阻塞为止先来先服务算法优先级优先调度算法 ②抢占式调度:在一定情况下,可以剥夺另外一个进程占用的CPU时间片轮转调度算法优先级优先调度算法进程的调度算法①先来先服务算法(FC...

2018-11-08 21:51:35 484 1

原创 进程的状态

就绪态:进程已经准备好,只要分配到CPU就可以执行执行态:进程处于就绪态被调度后,进出进入执行状态阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓冲区失败)而暂时无法运行,进程进入阻塞态,当满足请求时进程进入就绪态...

2018-11-08 21:50:27 186

原创 并发(Concurrent)和并行(Parallel)和区别

并发单个处理器(CPU),轮换执行多个任务,因为轮换的速度比较快,看起来好像多个任务在同时执行一样并行多个处理器(CPU),同时执行多个任务,每个任务分配在一个处理器上执行并发就像是一个大人给两个婴儿喂饭,喂完这个喂那个;并行,就是两个大人分别同时给两个婴儿喂饭...

2018-11-08 21:49:48 1550

原创 公平锁和非公平锁

2018-11-08 21:47:56 2351

原创 使用java实现一个死锁程序

死锁:在java语言中,死锁是指在两个或者两个以上的线程执行的过程中,因争夺资源而产生的一种互相等待的现象同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免就避免掉。synchronzied(A锁){synchronized(B锁){         }} ...

2018-11-08 21:46:28 713

原创 MySQL 中的行级锁、表级锁和页级锁

行级锁行级锁是 MySQL 中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁分为共享锁和排他锁。特点:加锁开销大,会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度最高页级锁页级锁是 MySQL 中锁定粒度介于行级锁和表级锁中间的一种锁。采取了折衷的页级锁,一次锁定相邻的一组记录。BDB 支持页级锁。特点:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定...

2018-11-08 21:45:27 1886

原创 CAS

尽管Java1.6为Synchronized做了优化,增加了从偏向锁到轻量级锁再到重量级锁的过度,但是在最终转变为重量级锁之后,性能仍然较低。所谓原子操作类,指的是java.util.concurrent.atomic包下,一系列以Atomic开头的包装类。例如AtomicBoolean,AtomicInteger,AtomicLong。它们分别用于Boolean,Integer,Long类型...

2018-11-08 21:44:31 180

原创 可重入锁

同一个线程再次进入同步代码的时候.可以使用自己已经获取到的锁,这就是可重入锁java里面内置锁(synchronized)和Lock(ReentrantLock)都是可重入的比如一个方法是synchronized,递归调用自己,那么第一次已经获得了锁,第二次调用的时候还能进入吗? 直观上当然需要能进入.这就要求必须是可重入的.可重入锁又叫做递归锁 public class Widg...

2018-11-07 09:58:01 1103

涵盖了90%以上的面试题

hashmap的底层原理 hashmap产生死锁的原因 hashmap的容量为什么一定要是2的幂呢 TreeMap的底层原理 HashMap,Hashtable和ConcurrentHashMap的区别 在ArrayList和LinkedList尾部添加元素,谁的效率更高 如果HashMap或者hashTable的key是一个自定义的类该怎么办 为什么重写equals还要重写hashCode? 介绍一下volatile jdk1.5新特性 jdk1.7新特性 jdk1.8新特性 java语言有哪些优点? 同一个.java文件中是否可以有多个main方法 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 如何在main方法执行前输出”hello world” java程序的初始化顺序 请说出作用域public,private,protected,以及不写时的区别 为什么java中有些接口没有任何方法 java中的clone方法有什么作用 面向对象有哪些特征 面向对象的开发方式有什么优点 组合和继承有什么区别 多态的实现机制是什么 重写和重载的区别 抽象类和接口有什么区别 break如果跳出多重循环 final,finally和finalize有什么区别 使用switch时有哪些注意事项 instanceof有什么作用 什么是不可变类 类型转换 Math类的round,ceil和floor方法 值传递和引用传递有什么不同? char型变量是否可以存储一个中文汉字 s=null和s=” ”是否相同 new String(“abc”)创建了几个对象 String变量做“+”运算时的编译优化 "=="和equals方法究竟有什么区别 String,StringBuffer,StringBuilder有什么区别 java中的数组是不是对象 数组初始化的方式有哪几种 length属性和length()方法有什么区别 finally块中的代码什么时候被执行 Java中的异常处理机制的简单原理和应用。 java socket java序列化 JVM加载class文件的原理 双亲委派模型 为什么要自定义类加载器 如何自定义类加载器 什么是GC 内存泄漏和内存溢出 Java的内存模型(JVM的内存划分) JVM内存模型1.7和1.8的区别 如何判断一个对象是否是垃圾对象 垃圾回收算法 Minor GC和Full GC 垃圾收集器 集合的继承体系 Collection 和 Collections的区别。 如何通过jdbc访问数据库 JDBC处理事务采用什么方法 Statement和PreparedStatement的区别 getString()方法和getObject()方法有什么区别 jdbc和hibernate有什么区别 http1.0和http1.1和http2.0的区别 http和https的区别 http缓存 cookie和session forward与redirect区别 页面请求的工作流程 HTTP中的GET和POST方法有什么区别 什么是Servlet servlet是线程安全的吗 Servlet的生命周期 JSP和Servlet的区别和联系 什么是MVC模型 TCP的连接和释放过程 什么是长连接和短连接 长连接是如何实现的 计算机网络体系结构 谈谈你对Struts的理解。 谈谈你对Hibernate的理解。 谈谈你对Lucene和solr的理解 谈谈你对ActiveMQ的理解 Spring的IOC,DI和AOP 谈谈你对webservice和dubbo的理解 谈谈你的SOA的理解。 谈谈你对freemarker的理解 谈谈你对springMVC的理解 谈谈你对mybatis的理解 hibernate和mybatis的区别 同步接口和异步接口的区别 为什么要加入锁机制 如何确定是否应该上锁?即如何判断是否有线程安全问题 什么是markword 乐观锁和悲观锁 偏向锁 轻量级锁 自旋锁 自适应自旋锁 重量级锁 synchronized 可重入锁 土方法实现可重入锁 使用AQS类实现可重入锁 CAS MySQL 中的行级锁、表级锁和页级锁 java中的死锁 公平锁和非公平锁 锁的总结 锁的优化 .......... 还有好多,不想写了,太多了,都是题主呕心沥血总结的

2018-11-02

包含图形推理和数字推理的解题技巧

本文档主要针对于需要做行测题的学生 图形推理的解题类型有九宫格类,数量类,位置类,类比推理类等等 分析后一项比前一项差或商 前两项的和或差等于第三项 前两项之积或之商等于第三项 分析后一项和前一项的和,差,积,商 平方关系,立方关系,质数关系 分数数列:通分或不通分分别分析分子分母 两项为一组(相邻,相隔,整数部分和小数部分)

2018-11-02

学习深入理解Java虚拟机的前几章笔记

包括jvm 的内存模型 对象的创建过程 垃圾回收算法 垃圾回收器 内存分配和回收策略

2018-11-02

关于eclipse的知识大全

内容包括java开发环境的搭建,eclipse的下载安装和卸载,eclipse的一些简单的使用方法和遇到的一些问题的解决

2017-11-30

java基础语法

针对java基础语法的一些笔记,方便大家学习,其中文档中绿色部分,是我学习java编程思想后补充的心得体会

2017-11-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除