自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 收藏
  • 关注

原创 动态代理及实现

1、InvocationHandler接口。

2022-08-14 20:38:29 390 1

原创 Java并发系列:自定义线程池

代码】Java并发系列:自定义线程池。

2022-08-03 18:45:14 410

原创 初识CDN

百度全科:CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。为什么会有CDN?浏览器发送请求到服务器,中间经过很多结点,当浏览器和服务器之前距离太远时,请求在传输过程中可能出现丢包、阻塞等问题,所以就会在各个地方建立多个服务器,从而减少请求之间的结

2022-07-04 21:59:28 439

原创 Java并发系列:LockSupport

LockSupport是java.util.concurrent.locks包下的一个类线程等待/通知机制中有三种方法实现:wait()和notify()方法特点:

2022-06-29 23:00:05 286

原创 Java并发系列:中断机制

大白话就是,中断机制是一种协商,不会立刻给你停掉。并且协商中断后,后序具体怎么做需要你自己指定。在java.lang.Thread类包下,线程中断机制主要有三种方法:如何中断一个线程?——在什么场景下使用上述方法也就是说这三个方法的特性是什么:1、通过一个volatile变量具体得:T1线程和T2线程共享一个volatile变量,当T2想要T1停止时,对这个volatile变量进行修改,当T1读取后进行中断。符合中断机制理论中协商思想:应由线程自己决定是否中断。2、AtomicBoolean实现原

2022-06-28 22:35:53 245

原创 Java并发系列:CAS操作

CAS和JUC下的原子类关系十分密切,在本篇博客中可能需要一些原子类的知识。在多线程环境下,i++语句是线程不安全的。我们可以使用synchronized关键字保证线程安全,但是synchronized有一些缺陷:锁太重,影响系统的性能。在使用原子类后,即可解决上述存在的问题,即保证原子性,又不需要加重锁。Java中JUC下原子类的应用,底层就是CAS这种思想来保证。说白了就是:在开发中使用JUC中的原子类,原子类是由CAS保证,Unsafe类实现了CAS思想。CAS是靠硬件实现,在硬件层面提升效率

2022-06-14 12:06:56 493

原创 Java并发系列:JMM

我们讨论线程安全,是在多个线程之间存在共享数据访问为前提,在多线程下代码执行的结果与预期正确的结果不一致,该代码就是线程不安全的,否则则是线程安全的。在中看到的定义。原文如下:当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那这个对象是线程安全的。关于定义的理解这是一个仁者见仁智者见智的事情。出现线程安全的问题一般是因为主内存和工作内存数据不一致......

2022-06-13 21:13:24 177

原创 Java并发系列:详解Synchronized关键字

为了提高效率,出现了多线程并发执行,并发执行处理共享变量就会带来安全性问题。那么,在java关键字synchronized就具有使每个线程依次排队操作共享变量的功能。很显然,这种同步机制效率很低,但synchronized是其他并发容器实现的基础,对它的理解也会大大提升对并发编程的感觉。Java中每个对象都有他的对象头,并且synchronized用的锁是存在对象头中的。1、Java并发编程的艺术 方腾飞等著;2、黑马JUC编程;............

2022-06-05 20:17:10 310

原创 Java并发编程系列:详解volatile关键字

在整个并发知识体系(不断扩充)下,本文主要讨论的内容:volatile可以说是java虚拟机提供的最轻量级的同步机制,因为它不会引起线程上下文的调度和切换,执行成本比synchronized低。Java内存模型(JMM)告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进行操作后何时会写到主内存中?这个时机对普通变量是没有规定的,而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile变量的修改会立刻被其他线程所

2022-06-05 17:42:05 179

原创 数据库中常见的几种表连接方式

内连接(Inner Join):仅将两个表中满足连接条件的行组合起来作为结果集自然连接:只考虑属性相同的元组对;等值连接:给定条件进行查询外连接(Outer Join)左连接:左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分补NULL;右连接:和左连接相反;全外连接(Full Outer Join):查询出左表和右表所有数据,但是去除两表的重复数据交叉连接(Cross Join):返回两表的笛卡尔积(对于所含数据分别为m、n的表,返回m*n的结果)..

2022-05-10 11:03:01 8429 2

原创 Java中键盘输入常用操作

1、next()与nextLine()(1) next():一定要读取到有效字符后才可以结束输入;对输入有效字之前遇到的空格,next()方法会自动将其去掉;只有输入有效字符后才能将其后面输入的空格作为分隔符或结束符。当有效字符出现后,后面的再输入空格,那么空格后的元素就不再输出;next()不能得到带有空格的字符串;(2) nextLine():以Enter为结束符,可以返回输入回车之前的所有字符;可以获得空格;next()会丢掉空格,nextLine()不会丢掉空格。2、把键

2022-04-21 19:22:17 4704

原创 字典序及下一个全排列问题

一、字典序概述字典序是一种排序算法。顾名思义,就是按照字典中的英文字母的先后顺序来排序。比如有两个字符串,我们按字符串中每个字符在字典中的排序顺序排序时,这就是字典序:aacaadabfbdfbhz...当第一个字符相等时,比较第二个字符,对于数字也是相同。二、下一个全排列问题字典序是一种排序算法,经典应用之一是求下一个全排列问题。什么是全排列?可以看leetcode上的题目:46.全排列下一个全排列指的是对于当前字符串,下一个比它大的(字典序)排列。比如(123),按字典序,下

2022-04-16 10:09:13 877

原创 并查集及其典型题目

一、并查集并查集优秀学习文章.二、题目P1551亲戚import java.util.*;public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String[] strArr = str.split(" ");

2022-04-15 19:03:12 120

原创 单调栈及其对应算法题

单调栈的应用:求解下一个大于x元素或者是小于x元素的位置。在这个过程中,维护的是一个单调栈。算法题目:稍加分析一下就会发现,和上面上说的差不多。做题技巧就是:1、始终要维护一个单调栈,具体看其是递增还是递减;2、分析判断条件,判断出栈和入栈;class Solution { public int[] dailyTemperatures(int[] temperatures) { //单调栈 详细版 int[] result = new int

2022-04-12 17:25:23 313

原创 2-3-4树和红黑树

一、2-3-4树树中只能有2、3、4节点,如果超过则分裂。二、2-3-4树和红黑树的关系三、红黑树第3点中,红黑树中都有空的叶子节点,有的红黑树中没有显示叶子节点。第4点中,表明没有连续相同颜色的父子节点。第5点中,表明了黑色节点的平衡。1、左旋和右旋代码实现代码逻辑:三种情况右旋同理:2、红黑树插入总共有6种。在各自的插入情况中,最终都会调整成符合红黑树定义的情况代码实现:上面代码完成了树的插入,还需要对其进行红黑平衡处理红黑平衡代码

2022-04-08 21:30:03 386

原创 B树和B+树

B树关键字:结点中的数值。在第四条中:p为指针,k为关键字。p0指向的数值要小于k1关键字,p1指向的数值要大于k1关键字,小于k2关键字,以此类推。在说明中,数据库应用中(B+树)可能在外部节点中存放一些内容。插入细节此时分裂,但是没有双亲(父)节点,所以只好新建一个双亲节点,树高度增加一层;再插入,要插入到叶子节点中此时有双亲节点,不需要增加树的高度此时双亲节点已经四个了,就需要再新建双亲节点,增加树的高度4、删除节点从左

2022-04-07 20:36:56 1731

原创 Java中自定义比较器

Java中自定义比较器1、数组比较器2、集合比较器3、自定义类比较器今天写算法题的时候需要用到数组排序,而且是自定义的,这块知识欠缺,就进行了相应的资料查询。以我自己的理解,Java中自定义比较器有三种1、数组比较器数组比较器用到了Arrays的工具类,此类中提供了许多静态方法,其中sort是默认升序,并且我查看了sort的源代码,使用的是快速排序:快速排序相信大家都不陌生,这里不再多说了。刚才说到sort默认是升序,如果我们想要降序呢?Arrays提供了自定义实现排序,就是自己重新实现C

2022-04-01 11:04:19 4162

原创 HTTPS加密过程详解

HTTPS加密过程详解!干货满满!准备好时间再看!

2022-03-25 21:28:43 19724 5

原创 IDEA中部署web项目并启动

1、首先在右上角打开Edit Configurations2、新建一个Tomcat Server3、Name框需要自己重命名,一般和自己的项目名称相同,(取决于你自己,你能知道是哪个就ok)。下面的URL是自动生成的路径4、进入到Deployment中5、添加项目的exploded6、添加完成后,点击apply就可以顺利启动了拓展:1、war模式和war exploded模式的区别war模式:将WEB工程以包的形式上传到服务器 ;war exploded模式:将WEB工

2022-03-23 12:56:38 6923

转载 Mybatis中sql语句的#号和$号的区别

1、#{变量名}#{变量名}可以进行预编译、类型匹配等操作,#{变量名}会转化为jdbc的类型。select * from tableName where id = #{id}假设id的值为12,其中如果数据库字段id为字符型,那么#{id}表示的是‘12’;如果是整型,则id的值为12;并且Mybatis会将上面SQL语句转化为jdbc的 select * from tableName where id =?,把?参数值设置为id的值。这种方式使得sql语句是经过预编译的,它是把#{}中间的

2022-03-20 10:56:54 1220

原创 Spring中的@Transactional详解

1、原理事务的概念想必大家都很清楚,其ACID特性在开发过程中占有重要的地位。同时在并发过程中会出现一些一致性问题,为了解决一致性问题,也出现了四种隔离级别,这里就不再详述了,感兴趣的可以去查一下。下面我们讨论一下Spring中的事务。Spring中的事务有两种:编程式事务声明式事务通常情况下我们使用声明式事务,它是基于SpringAOP实现的。基于AOP实现的事务极大得帮助了我们的开发效率,其本质是对方法进行前后拦截,在目标方法前加入一个事务,在目标完成后再加入一个事务进行提交或者回滚,这种

2022-03-18 09:45:07 1094

原创 最优化算法之遗传算法

最优化算法之遗传算法一、算法模型(1)编码方法(2)适应度函数(3)选择群体(4)交叉(5)变异二、基本原理1、编码1.1编码精度2、解码3、复制选择三、代码实现一、算法模型遗传算法(Genetic Algorithm)。算法的来源在这里不做过的的介绍了,下面我看看看它的模型和代码实现。(1)编码方法编码指的是使用一种方式对数值解进行编码。比如说数值解为5,但是我们在后面要对其进行交叉变异操作,单个数值5无法进行,所以要对其进行编码。一般我们使用二进制编码的方式对数值解进行编码和解码。(2)适应

2022-03-16 16:46:56 3765

原创 数组题目常用解法——随笔

数字题目基本上离不开这些解法:1、二分查找2、双指针3、滑动窗口4、哈希表5、动态规划、贪心

2022-03-14 11:00:38 96

原创 549. 二叉树中最长的连续序列

549、二叉树中最长的连续序列class Soluion { int maxres = 0; public int longestConsecutive(TreeNode root) { postOrder(root); return maxres; } /** *arr数组表示递增或者递减:arr[0]表示递减,arr[1]表示递增 */ public int[] postOrder(TreeNode root) { int[] arr = new int[2]; if

2022-03-09 20:12:24 475

转载 数组在栈和堆中的分配

文章转载自:Java数组—栈内存与堆内存的区别(通过数组讲解)Java数组针对于Java数组,Java语言把内存分为两种:-栈内存和堆内存。栈内存:在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配,当在一段代码块中定义一个变量时,Java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,Java会自动释放掉为该变量所分配的内存空间。堆内存:堆内存用来存放 new 运算符创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃级回收器来管理。在堆中创建了一个数组或

2022-03-02 15:07:50 1697

转载 详解java重定向和转发的区别

重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。怎么选择是重定向还是转发呢?通常情况

2022-03-02 10:08:05 2656

转载 request.getSession()方法

文章转载:https://www.cnblogs.com/xiaoqiqistudy/p/11195652.html1、request.getSession()可以帮你得到HttpSession类型的对象,通常称之为session对象,session对象的作用域为一次会话,通常浏览器不关闭,保存的值就不会消失,当然也会出现session超时。服务器里面可以设置session的超时时间,web.xml中有一个session time out的地方,tomcat默认为30分钟。2、session.setA

2022-03-02 09:34:25 12229

转载 一文解决内存屏障

内存屏障是硬件之上、操作系统或JVM之下,对并发作出的最后一层支持。再向下是是硬件提供的支持;向上是操作系统或JVM对内存屏障作出的各种封装。内存屏障是一种标准,各厂商可能采用不同的实现。本文仅为了帮助理解JVM提供的并发机制。首先,从volatile的语义引出可见性与重排序问题;接下来,阐述问题的产生原理,了解为什么需要内存屏障;然后,浅谈内存屏障的标准、厂商对内存屏障的支持,并以volatile为例讨论内存屏障如何解决这些问题;最后,补充介绍JVM在内存屏障之上作出的几个封装。为了帮助理解,会简要讨论

2022-02-28 15:01:36 274

原创 内存屏障中的读写屏障——并发问题

内存屏障中的读写屏障——并发问题一、并发问题1、概述2、Volatile通过读写屏障保证可见性和有序性2.1、保证可见性2.2、保证有序性读写屏障涉及到JVM和并发编程的知识,但是其概念又相差较多,容易混淆一、并发问题1、概述Volatile的底层实现原理就是内存屏障2、Volatile通过读写屏障保证可见性和有序性2.1、保证可见性声明写屏障后,写屏障之前的代码都会同步到主存当中,保证之后的线程读到的都是最新的;2.2、保证有序性但是Volatile无法解决指令交错:

2022-02-28 13:05:06 1653

原创 读写屏障及三色标记法

内存屏障中的读写屏障及三色标记法一、并发问题1、概述2、Volatile通过读写屏障保证可见性和有序性2.1、保证可见性2.2、保证有序性二、 垃圾回收问题1、三色标记法1.1 基本算法1.2 多标-浮动垃圾1.3 漏标-读写屏障1.3.1 写屏障(Store Barrier)(1) 写屏障 + SATB(2) 写屏障 + 增量更新1.3.2 读屏障(Load Barrier)1.4 三色标记法与现代垃圾回收器读写屏障涉及到JVM和并发编程的知识,这里放到一块来探讨一、并发问题1、概述Volatil

2022-02-28 11:52:08 536

原创 Java SpringMVC三层架构及执行流程

一、SpringMVC三层架构Java SpringMVC的工程结构一般来说分为三层,自下而上是Modle层(模型,数据访问层)、Cotroller层(控制,逻辑控制层)、View层(视图,页面显示层),其中Modle层分为两层:dao层、service层,MVC架构分层的主要作用是解耦。采用分层架构的好处,普遍接受的是系统分层有利于系统的维护,系统的扩展。就是增强系统的可维护性和可扩展性。对于Spring这样的框架,(View\Web)表示层调用控制层(Controller),控制层调用业务层(Ser

2022-02-26 11:47:08 2501

原创 偏向锁何种情况升级为轻量级锁

1、线程1持有偏向级锁;2、线程2来竞争锁对象;3、判断当前对象头是否是偏向锁;4、判断拥有偏向锁的线程1是否还存在;线程1不存在,直接设置偏向锁标识为0(线程1执行完毕后,不会主动去释放偏向锁)。使用cas替换偏向锁线程ID为线程2,锁不升级,仍为偏向锁;线程1仍然存在,暂停线程1。设置锁标志位为00(变为轻量级锁),偏向锁为0;5、从线程1的空闲monitor record中读取一条,放至线程1的当前monitor record中;6、更新mark word,将mark word指向线

2022-02-20 18:41:23 1768

转载 系统中的DTO与MO

1、概述在一个Web服务的实现中,我们常常需要访问数据库,并将从数据库中所取得的数据显示在用户页面中。这样做的一个问题是:用于在用户页面上展示的数据和从数据库中取得的数据常常具有较大区别。在这种情况下,我们常常需要向服务端发送多个请求才能将用于在页面中展示的数据凑齐。一个解决该问题的方法就是根据不同需求使用不同的数据表现形式。在一个服务实现中较为常见的数据表现形式有MO(Model Object,在有些上下文中也被称为VO,Value Object)和DTO(Data Transfer Object)。

2022-02-19 21:18:23 567

转载 PriorityQueue优先队列源码分析

一、构造PriorityQueue实例 在实际介绍PriorityQueue原理之前,再次啰嗦PriorityQueue的内部结构。PriorityQueue中的元素在逻辑上构成了一棵完全二叉树,但是在实际存储时转换为了数组保存在内存中,而我们的PriorityQueue继承了接口Queue,表名这是一个队列,只是它不像普通队列(例如:LinkedList)在遍历输出的时候简单的按顺序从头到尾输出,PriorityQueue总是先输出根节点的值,然后调整树使之继续成为一棵完全二叉树 样每次输出的根节点总是

2022-02-11 19:19:39 227

原创 设计模式——代理模式

本文仅以笔记功能为主一、代理模式1、链接: Graphic Design Patterns.2、链接: 菜鸟教程-代理模式.3、《大话设计模式》二、动态代理代理模式分为两类:静态代理、动态代理。动态代理的优点:静态代理只针对某个特定的业务进行实现,接口中增加新的方法后,相应的实体类、代理类都要实现此方法,这会造成代码越来越复杂,而动态代理没有此问题。在动态代理中,接口中声明的所有方法都被放到了调用处理器中一个集中的方法处理(InvocationHandler.invoke()),这样的

2022-02-11 17:05:11 238

原创 学习笔记——计算机基础

1、第一遍快速过,不需要看太多细节。整理自己的思维导图。2、搜索面经:去牛客专门搜索具体科目的面经,搜个大概几百条,整理到文件中。3、根据面经去回答问题。遇到不会的,标记并翻阅资料,进行总结常见的问题。最终整理出自己的知识体系...

2022-02-11 10:30:25 130

转载 Queue和Deque的区别

QUEUE与DEQUE的区别一、概述1、PriorityQueue2、LinkedList和ArrayDeque3、小结一、概述从上图看出,Queue以及Deque都是继承于Collection,Deque是Queue的子接口。下面来看一下官方文档的解释。A linear collection that supports element insertion and removal at both ends. The name deque is short for "double ended que

2022-02-08 22:02:44 1767

原创 JAVA中String的两种拼接方式及其存储方式

Java中的String是一种字符串类,其具有许多方法,这里我们讨论一下字符串的拼接和它的存储方法。第一种拼接方式就是s3的方式,两个字符串相连接,拼接完后的字符串是存放到方法区的常量池中,常量池的一个特性就是不会存储相同的字符串;第二种拼接方式是s4的方式,此时拼接完是在堆中形成对象并对其进行存储;这两种方式我们在使用的时候需要注意其对内存的影响;参考资料:尚硅谷java课程...

2022-02-05 12:13:42 1102 4

原创 JAVA集合容器的线程安全性及其特性

JAVA集合容器的线程安全性一、Java中的集合容器二、容器的线程安全性一、Java中的集合容器Java中有单例集合和双例集合,如下:单例集合:List接口、Set接口,继承自Collection接口。双例集合:Map接口二、容器的线程安全性常用集合安全性特点ArrayList线程不安全底层数组实现,查询效率高,增删效率低手机$12导管$1...

2022-02-03 10:44:07 1086

原创 GC日志分析

参考资料:链接: 尚硅谷JVM全套视频.

2022-01-23 13:30:59 66

空空如也

空空如也

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

TA关注的人

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