悲观锁 和 乐观锁 是啥?

一、悲观锁悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞,直到它拿到锁。悲观锁是一种利用数据库内部机制提供的锁的方法,也就是对更新的数据加锁,这样在并发期间一旦一个事务持有了数据库记录的锁,其他的线程将不能再对数据进行更新了,这就是悲观锁的实现逻辑。对于悲观锁来说,只能有一个事务占据资源,其他事务被挂起等待持有资源的事务提交并释放资源。CPU就会将这些得不到资源的线程挂起,挂起的线程也会消耗CPU的资源,尤其是在高.
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

MySQL相关知识点(持续更新)

一、索引1.1 为什么要使用索引?这个可以类比查新华字典,假如字典前面没有“按偏旁部首”、“按拼音”等查询,你要是去查一个字就只能一个一个去字典里面翻了,效率很低。但是按照“偏旁部首”去查就快多了,不用盲目地去一个个翻找。“按偏旁部首”、“按拼音”其实就是字典为自己建立的索引。同理,数据库为什么也要建立索引?假如不建立索引,你要查一条记录就只能一条一条去查找,效率低下。有了索引,你就可以不断的缩小查找范围来筛选出最终想要的结果,大大提高MySQL的检索速度。实际上,索引也是一张表,该表保.
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

IDEA怎么实现远程调试

一、什么是远程调试?两个VM之间通过debug协议进行通信,然后以达到远程调试的目的。两者之间可以通过socket进行通信。换句话说,就是你可以在本地测试非本地环境的应用,比如在你本地直接调试生产环境的代码。这就比较爽了,线上出现问题你不需要在本地准备和线上一样的环境来复现bug,每次准备一样的环境都浪费那么多时间精力;此外,你在远程调试的时候还不会影响线上环境的运行,比如你在本地代码打断点,只会在你本地进入停住,不会影响线上,线上会正常执行完毕;最后,你可以直接操作前端页面进行调试,而不用借助post
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

线程池 是啥?

一、为什么要用线程池一个线程执行某个任务的时间片可以分成3块,创建线程T1,执行任务T2,销毁线程T3,现实中往往是 T1+T3>T2,也就是真正执行任务花费的时间很短,反而是创建与销毁线程更耗时,也是就是若我们需要多个线程去执行任务时,线程的创建和销毁会占用更多资源。于是有人提出提前创建一堆线程,然后把它们放在一个容器中统一进行管理,需要用的时候就直接拿出来用,用完之后再放回池子里。这样就不会在线程的创建和销毁上浪费时间。上面的“池子”就是线程池,很明显线程池可以给我们带来很多好处:.
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

rebase 和 merge 的区别么?

大概来说,git merge和git rebase都是用来做代码合并的,两者从最终效果来看没有任何区别,都是将不同分支的代码融合在一起。但是在遇到冲突和具体使用场景上有一些不同。一、rebaserebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。举例:如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master ..
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

Sping中bean的生命周期(代码展示、循环依赖)

public interface Person { public void live(); public void setFood(Food food);}public interface Food { public void eat();}@Componentpublic class Apple implements Food { @Override public void eat() { System.out.printl.
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

Spring MVC调度流程

一、Spring MVC的由来在最早期WEB系统有前端到后端是:请求+JSP+Java Bean + 数据库的模式,这种JSP和Java Bean前后端耦合在一起会带来很多麻烦。后来被Serverlet+JSP+Java Bean+数据库 的模式取代,多了一个Serverlet组件,用户的请求先到Serverlet,Serverlet相当于一个控制器,它来调度Java Bean以及读取数据库,最后把结果放到JSP进行展示。这时Serverlet就是Controller,Java Bean就是..
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

JVM运行时数据区域、内存溢出是怎样的?

一、Java内存区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。图1-1 运行时数据区1.1 程序计数器程序计数器是一块较小的内存,属于线程隔离区域,是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分...
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

常见 JVM垃圾回收器、内存分配策略、JVM调优

垃圾收集(Garbage Collection,下文简称GC),垃圾收集的历史远远比Java久远。经过半个世纪的发展,今天的内存动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了解垃圾收集和内存分配?答案很简单:当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。一、哪些内存需要回收?回答这个问题前需要先了解JVM到底有哪些内存区域,可参考:https://blog..
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

JVM的类加载机制与“双亲委派”模型

之前关于反射的文章也说过java类的加载过程,但是因为主题原因没有很系统的介绍,这里系统学习介绍下。一、类的生命周期一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking)。类的生命周期二、类加载的过程.
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

Nginx 基本概念(反向代理、动静分离、负载均衡、高可用)、安装配置(JDK\Tomcat\Nginx\Keepalived)、配置实例效果

理想中是平均分配现在80端口是开放的如修改了nginx的配置文件nginx.conf,就需要重新加载才能生效,注意不是重启nginx,只是重新加载配置文件以某个域名访问的时候,首先会在本地的hosts文件查找是否有这个域名与ip的映射配置,没有才会走dns域名解析...
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

servlet相关(流程、原理、生命周期、HttpServlet)

一、什么是servlet ?Servlet本质上就是一个Java语言定义的接口,广义的Servlet就是指实现了这个Servlet接口的类。一般指的就是后者。Servlet实例的主要功能就是根据客户端的请求,找到并调用服务端相关java代码,完成对请求的处理和运算。Servlet实例遵循了服务器能够识别的规则,服务器会根据请求调用对应的servlet进行请求处理。(1)Servlet实例,由Servlet容器创建,通常这个容器就是tomcat。(2)Servlet是一个接口:位于ja.
分类: 其他 发布时间: 04-06 22:35 阅读次数: 0

排序算法专辑(冒泡、快速排序、选择排序)未完待续....

一、冒泡排序原理:比较两个相邻的元素,将值大的元素交换到右边。比如:要排序数组:[10,1,35,61,89,36,55]第一趟排序:第一次排序:10和1比较,10大于1,交换位置      [1,10,35,61,89,36,55]第二趟排序:10和35比较,10小于35,不交换位置  [1,10,35,61,89,36,55]第三趟排序:35和61比较,35小于61,不交换位置  [1,10,35,61,89,36,55]第四趟排序:61和89比较,61小于89,不交换位置  [.
分类: 其他 发布时间: 04-06 22:34 阅读次数: 0

java中的网络编程实例

TCP的全称?UDP的全称?TCP(Transfer Control Protocol)TCP:一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议。特点:面向连接;点到点的通信;高可靠性;占用系统资源多、效率低。UDP(User Datagram Protocol)特点:非面向连接;传输不可靠,可能丢失;发送不管对方是否准备好,接收方收到也不确认;可以广播发送;非常简单的协议,开销小如何理解Socket的含义所谓socket通常也称作"套
分类: 其他 发布时间: 04-06 22:34 阅读次数: 0

Java中的IO编程实例

一、字节流和字符流有什么区别?输入流和输出流有什么区别?节点流和处理流的区别?1、字符流和字节流是按照处理流的数据单位进行的划分2、OutputStream、InputStream、Writer、Reader四个都是抽象类。3、字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。4、InputStreamReader,OutputStreamWriter(转换流)来关联,实际上是通过byte[]和String来关联的。.
分类: 其他 发布时间: 04-06 22:34 阅读次数: 0

查找算法专辑(二分查找)未完待续....

一、二分查找原理:首先,使用二分法查找的前提是:被查找的数组已排好序具体实现:假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2.1.开始令front=0(指向3),end=7(指向88),则mid=3(指向36)。因为a[mid]>x,故应在前半段中查找。2.令新的end=mid-1=2,而front=0不变,则新的mid=1。此时x>a[mid].
分类: 其他 发布时间: 04-06 22:34 阅读次数: 0

什么是阻塞和非阻塞?什么是同步和异步?什么是BIO、NIO、AIO?

一、什么是阻塞和非阻塞?什么是同步和异步?1.1、阻塞与非阻塞阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的的一种处理方式。当数据没有准备就绪时:阻塞:线程持续等待资源中数据准备完成,直到返回响应结果。 非阻塞:线程直接返回结果,不会持续等待资源准备数据结束后才响应结果。1.2、同步与异步同步与异步是指访问数据的机制,同步一般指主动请求并等待IO操作完成的方式。 异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知。老王烧开水:1、普通水壶煮水,.
分类: 其他 发布时间: 04-06 22:34 阅读次数: 0

Spring Boot 自动配置原理及自定义Starter

一、Spring Boot 是怎么完成自动配置的?初识Spring Boot时我们就知道,Spring Boot有一个全局配置文件:application.properties或application.yml。这些配置是如何在Spring Boot项目中生效的呢?Spring Boot关于自动配置的源码在spring-boot-autoconfigure-x.x.x.x.jar中:自动配置始于Spring Boot的核心注解:@SpringBootApplication,它在主函数所在的..
分类: 其他 发布时间: 04-06 22:34 阅读次数: 0

Mybatis框架专辑

一、Mybatis能做啥?(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。(2)MyBatis 可以使用XML 或注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。(3)通过xml 文件或注解的方式将要执行的各种 st...
分类: 其他 发布时间: 04-06 22:34 阅读次数: 0

算法设计(贪婪算法、漏桶算法、令牌桶算法)

一、贪心算法也叫贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解,最终通过各环节局部最优解促成整体的最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)所以,对所采用的贪心策略一定要仔细分析其是否满足无后效性。1.1贪心算法的基本思路..
分类: 其他 发布时间: 04-06 22:34 阅读次数: 0