自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【MySQL】MySQL事务隔离级别

隔离级别最高,完全服从ACID的隔离级别,所以的事务依次执行,可以避免脏读、不可重复读、幻读。:对同一字段多次读取的结果都是一致的,除非本身事务修改,可以避免脏读和不可重复读,但是可能造成幻读。:最低的隔离级别,允许读取尚未提交的数据变更,可能造成脏读、不可重复读、幻读。1.可串行化并发能力最低,所有的事务等待执行,解决所有问题,安全性高,但是效率低下。:允许读取并发事务已经提交的数据,可以避免脏读,但是可能造成不可重复、幻读。事务是逻辑上的一组操作,要么全执行,要么全不执行。

2022-09-26 17:30:33 250

原创 【面经】某团面经---一篇到底

RuntimeException:运行异常一般是Java虚拟机正常运行期间抛出的异常的超类,程序中可以处理这些异常,也可以不处理这些异常,编译器并不会提示我们来处理这些异常。因为Java浮点数使用二进制数据的科学记数法来表示浮点数,因此可能不能精确表示一个浮点数,使用double类型的浮点数比float类型的浮点数更精确,但如果浮点数的精度足够高,依然可能发生这种情况,如果开发者需要精确保存一个浮点数,则可以考虑使用BigDecimal类。实现依赖注入的关键是IoC容器,它的本质就是一个工厂。

2022-09-25 23:47:59 195

原创 【Java基础】HashMap底层数据结构及其原理

假设线程 1 和线程 2 同时进行 put 操作,恰好这两条不同的数据的 hash 值是一样的,并且该位置数据为null,这样,线程 1 和线程 2 都会进入这段代码进行插入元素。运算那么高十六位所代表的部分特征就可能被丢失,将高十六位无符号右移之后与低十六位做异或运算使得高十六位的特征与低十六位的特征进行了混合得到的新的数值中就高位与低位的信息都被保留了 ,而在这里采用异或运算而不采用。运算的原因是 异或运算能更好的保留各部分的特征,如果采用 **&**运算计算出来的值会向1靠拢,采用。

2022-09-13 22:40:18 49

原创 【Java基础】ArrayLsit 和 LinkedList区别、底层原理以及扩容算法

【Java基础】ArrayLsit 和 LinkedList区别、底层原理以及扩容算法。

2022-09-09 17:03:35 127

原创 【Java基础】ThreadLocal的底层原理以及应用场景

2. Threadocal底层是通过ThreadLoclMap来实现的,每个Thread对象(注意不是Threadlocal对象)中都存在一个ThreadlocalMap,Map的key为ThreadLocal对象,Map的value为需要缓存的值。

2022-09-09 09:01:47 36

原创 【操作系统】什么是死锁,以及死锁产生的原因和必要条件

所谓死锁,就是在两个或多个并发进程中,如果每个进程持有某种资源而又都等待着别的进程释放它或它们现在保持着的资源,否则就不能向前推进,此时每个进程都占用了一定的资源但又都不能向前推进,称这一组进程产生了死锁。举个例子,如果此时有一个线程A持有a锁,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。

2022-09-07 23:24:12 72

原创 Linux系统下 MySQL 8.0.28 安装详细教程

(4)安装,MySQL各安装包之间有依赖关系,所以安装顺序必须按照下列来。最近买了一台服务器,打算安装一下MySQL8.0,下面作详细安装教程。(3)如果服务器中已经安装了mariadb,可以使用以下命令卸载。(5)启动MySQL后,使用临时密码登录MySQL数据库。(2)查询服务器中是否安装了MySQL。(5)修改数据库密码,并开启远程访问。

2022-09-06 11:21:25 561

原创 【Java基础】浮点数精度丢失问题剖析

(6)因为我们是把小数点左移3位,因此将3减去1得2,化为二进制,并补足7位得到0000010,放入第29到第23位。(6)如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。作为有符号整数的指数可以有正负之分。(6)因为小数点被右移了3位,所以将3化为二进制,在左边补“0”补足七位,得到0000011,各位取反,得到1111100,放入第29到第23位。

2022-09-04 14:26:56 284

原创 【Java基础】七种常用的设计模式详解

增加新的具体工厂和产品族很方便,比如说,我们想要增加小米,只需要创建一个小米工厂AppleFactory实现手机工厂接口PhoneFactory,合理的解决的简单工厂模式不能修改代码的缺点。我们通过创建一个PhoneFactory类,成功的完成工厂的创建。(1)抽象工厂(Abstract Factory)提供了创建产品的接口,它包含多个创建产品的方法newProduct(),可以创建多个不同等级的产品。:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。

2022-09-04 12:52:22 67

原创 【JVM】JVM内存模型详解

JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,这也是Java能够“一次编译,到处运行的”原因。方法区存储的内容有:类型信息(比如类全称、父类全称)、域信息(域名称、域修饰符private等)、方法信息(方法名称、方法修饰符、返回类型等)、字面量(字面量包括文本字符串、八种基本类型的值 、被声明为final的常量等)。Java虚拟机栈是当前线程在执行方法时存储所需的数据、指令、返回地址的一种栈结构(先进后出)。

2022-08-24 01:14:00 149

原创 【Java基础】全面讲解Java中的各种锁

1. 概念synchronized是关键字,用于解决多个线程间访问资源同步性问题,保证其修饰的方法或代码块任意时刻只能有一个线程访问synchronized 它可以把任非 NULL 的对象当作锁。他属于独占式悲观锁,同时属于可重入锁。2. 作用范围线程A调用一个实例对象非静态Synchronized方法,允许线程B调用该实例对象所属类的静态s方法而不会发生互斥,前者锁的是当前实例对象,后者锁的是当前类作用于同步代码块 锁住的当前对象,进入同步代码块前需要获得对象的锁3. 实现方式Synchronized

2022-08-21 13:02:09 64

原创 【Java基础】乐观锁和悲观锁的实现

如果修改过,则重新读取,再次尝试更新,循环上述步骤直到更新成功(当然也允许更新失败的线程放弃操作),乐观锁适用于多读的应用类型,这样可以提高吞吐量。换句话说,乐观锁 其实不是“锁”,它仅仅是一个循环重试CAS的算法而已,但是CAS有一个问题那就是会产生ABA问题,什么是ABA问题,以及如何解决呢?有了CAS,就可以实现一个乐观锁,允许多个线程同时读取(因为根本没有加锁操作),但是只有一个线程可以成功更新数据,并导致其他要更新数据的线程回滚重试。悲观锁是一种悲观思想,每次去拿数据的时候都认为别人会修改。

2022-08-21 12:03:28 50

原创 【数据库】MySQL主从复制以及读写分离实践

MySQL主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MysQL数据库自带功能,无需借助第三方工具。master将改变记录到二进制日志 (binary log)slave将master的binary log拷贝到它的中继日志 (relay log)中。......

2022-08-18 20:14:53 162

原创 【JVM】深入理解JVM垃圾回收机制及其垃圾回收算法

在 JVM 进行垃圾回收之前,首先就是判断哪些对象是垃圾,也就是说,要判断哪些对象是可以被销毁的,其占有的空间是可以被回收的。根据 JVM 的架构划分,我们知道, 在 Java 世界中,几乎所有的对象实例都在堆中存放,所以垃圾回收也主要是针对堆来进行的。在 JVM 的眼中,垃圾就是指那些在堆中存在的,已经“死亡”的对象。而对于“死亡”的定义,我们可以简单的将其理解为“不可能再被任何途径使用的对象”。那怎样才能确定一个对象是存活还是死亡呢?这就涉及到了垃圾判断算法,其主要包括引用计数法和可达性分析法。...

2022-08-14 23:47:12 87

原创 【JVM】JVM类加载全过程以及双亲委派模型详解

如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当上一层类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到这个类)时,下一层类加载器才会尝试自己去加载;综上可得,如果想要打破JVM双亲委派模型,那么就自定义一个类加载器,继承classLoader类,重写其中的loadClass方法,使其不进行双亲委派即可。双亲委派模型是可以打破的;...

2022-08-12 20:45:31 68

原创 【数据库】MySQL索引

MySQL官方对索引的定义为︰索引( index ))是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如下面的示意图所示:在没有简历索引时,我们查询数据时,需要全表扫描,因此查询效率很低,当我们建立如图2所示的二叉树索引时,我们以二分查找的方式搜索二叉树,索引中维护着数据和索引之间的关系,这样的话查找效率就比不建立索引要快很多。......

2022-08-12 12:30:07 31

原创 唐人外卖项目总结

唐人外卖项目是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。

2022-08-11 17:11:45 169

原创 【Java基础】Java基础之反射

反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。......

2022-08-09 19:06:42 59

原创 【软件测试】自动化测试之unittest框架

提供用例组织与执行当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到成百上千条时,大量的测试用例堆砌在一起,就产生了扩展性与维护性等问题,此时需要考虑用例的规范与组织问题了。单元测试框架就是来解决这个问题的。提供丰富的比较方法在用例执行完之后都需要将实际结果与预期结果进行比较(断言),从而断定用例是否可以顺利通过。单元测试一般会提供丰富的断言方法。例如,判断相等/不相等、包含/不包含、True/False等断言方法。提供丰富的日志。.....................

2022-08-05 00:35:53 69

原创 【软件测试】python+selenium自动化测试

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。单元测试java的单元测试框架是Junit,在这里不再赘述。接口自动化接口测试就是API测试,相对于UI自动化API自动化更加容易实现,执行起来也更稳定。接口自动化的有以下特点(1)可在产品前期,接口完成后介入(2)用例维护量小(3)适合接口变动较小,界面变动频繁的项目。.........

2022-07-31 22:26:42 238

原创 【算法】七大排序详解(下篇)

简单总结一下,在长度为50000的数组,数值在【0~整形最大值】的数组上进行排序测试,O(N^2)的算法和O(NlogN)算法性能上确实是差了很多,包括优化后的排序算法也比优化前的性能好了很多,故在某些场景下,选择合适的排序算法才是成功之道。排序思路:又称缩小增量排序,给定一个数值gap,将原数组按照gap分为若干个组,组内再进行插入排序,直到gap=1,整个数组已经被调整的接近有序,最后再全集和上进行一次插入排序即可;二是合而为整,就是将拆分的数组不断合并,同时合并的过程中将数组有序化。

2022-07-30 16:37:35 137

原创 【算法】七大排序详解(上篇)

排序思路每次从无序区间选择一个数插入到合适的位置,插入过程类似于扑克牌的码牌过程,插入排序虽然是O(N^2)的排序算法,但是在近乎有序的数据集上,插入排序的性能甚至优于NlogN的排序算法,所以,插入排序也作为其他高阶排序算法的优化手段;排序思路遍历原数组,依次比较前后元素的大小,如果后一元素比前一元素小,则交换它们位置,否则继续向后遍历,直至整个数组有序;排序思路将待排序数组分为有序区间和无序区间,每次从无序区间选择一个元素添加到有序区间指定位置,直至整个数组有序;时间复杂度O(n^2)......

2022-07-29 21:17:08 131

原创 【数据结构】优先级队列的实际应用之TopK问题

自定义一个降序的比较器,创建优先级队列时传入比较器}}/***升序的比较器Students1=newStudent("胡歌",30);Students2=newStudent("江江",24);Students3=newStudent("浩存",20);//1.比较器写法Queuequeue=newPriorityQueue(newStudentDesc());.........

2022-07-28 11:46:34 68

原创 【详解】优先级队列的底层实现

堆本质上是一颗完全二叉树,基于最大堆实现的优先级队列,堆顶元素就是当前队列中的最大值,每次出队操作,就从堆顶取出最值,就实现了出队的优先级(JDK中的优先级队列是基于最小堆实现的)。优先级队列底层是基于堆的实现,按照优先级的大小动态出队(动态指的是元素个数动态变化,而非固定)。普通队列FIFO。按照元素的入队顺序出队,先入先出。优先级队列的实际应用之TopK问题。父节点索引(k-1)/2。左子树节点2K+1。右子树节点2k+2。...

2022-07-27 23:13:06 214

原创 云服务器web项目部署详解

提前购买好一台云服务器,可以是阿里云、百度云、腾讯云等等,大家根据自己的喜好购买,小编这里使用的是轻量级百度云;(备注只需将脚本的项目更改为你自己的项目将即可,同时,你本地的项目需要关联远程git仓库)准备一个远程连接工具,可以是xshell/xftp等,小编使用的是finalShell;部署web项目所需要的一些工具,JDK,MySQL,TomCat,Maven等;(4)安装成功后,系统会初始化mysql,通过以下命令查看数据库临时密码。(2)上传jar包到Linux系统;创作不易,麻烦点个赞啦!....

2022-07-26 22:58:57 402

原创 【网络基础】浏览器输入一个URL之后,都发生了什么(详细讲解)

将封装好的数据包通过硬件设备传输封装的时候时不知道MAC地址的,获取方式就是使用ARP地址解析协议,首先查看目的主机和源主机是否在同一网段,将目的IP和子网掩码按位相与得到网段,如果在同一网段就直接通过ARP获取目的MAC,如果不在同一网段就将数据交给网关处理,使用APR查找网关的MAC,目的MAC就是网关的MAC。当发送一个请求时,第一步封装就是在应用层,在应用层中,会根据应用层的HTTP协议将请求封装成HTPP格式,然后将封装好的数据交给传输层进一步封装。........................

2022-07-16 00:04:18 797 2

原创 【操作系统】volatile关键字深层解析

操作了不同的属性,虽然每个线程的属性没有特别强的依赖,但是线程之间有可能造成指令重拍,导致值改变。缓存一致性协议将缓存中修改的变量写入到主内存,并且cpu总线嗅探机制进行监听,如果有线程之间的变量改变就将另外的线程变量变失效,另外的线程就需要重新获取变量并进行处理。如果变量之间如果没有特别强的依赖,编译器可能会进行一些代码的优化进行指令的调整,使得指令顺序不同导致问题。线程之间不能直接通信,要通过共享主内存进行通信,所以多个线程抢占同一个资源的时候,需要进行共享主内存,将需要的变量写入到线程的缓存当中。..

2022-07-13 12:45:14 27

原创 【操作系统】阻塞队列的实现及底层分析

代码】【操作系统】阻塞队列的实现及底层分析。

2022-07-10 18:33:31 29

原创 【详解】线程池及其自定义线程池的实现

1. 为什么使用线程池?线程池是运用场景最多的并发框架,几乎所有需要一步或者并发执行任务的程序都可以使用线程池。使用线程池一般有以下三个好处:①降低资源的消耗,通过重复利用已经创建的线程降低线程创建和销毁造成的消耗。②提高相应速度,当任务到达的时候,任务可以不需要等到线程创建就能立刻执行。③提高线程的可管理性,线程是稀缺资源,使用线程池可以统一的分配、调优和监控。2. Java中的线程池ThreadPool线程池参数介绍1)corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程

2022-07-08 12:41:21 189

原创 Linux简单的shell脚本程序

尊敬的用户,请选择如下功能(按数字即可):1:查看进程信息2:查看用户信息3:显示当前目录信息4:显示计算机名5:显示Linux分发版本名称和Linux内核版本6:显示当前的IP地址7:退出并且,当用户输入相应的数字执行对应的功能。...............

2022-07-07 18:08:58 148

原创 【多线程】单例模式下的线程安全问题

这两个附加的操作是在队列为空时,获取元素的线程会等待队列变为非空。主线程中,队列元素为空,消费者(主线程)发生阻塞,此时,主线程(消费者)唤醒生产者,即往队列中添加元素。子线程中,读取键盘输入往队列中添加元素,当队列中添加一个元素后,生产者唤醒消费者(主线程),即可取出队列元素。主线程中对静态变量quit进行了修改,但是对于子线程Mythread来说,quit的修改是不可见的,此时就需要使用关键字volatile修饰静态变量,保证内存的可见性,子线程中当quit被修改时就会输出变量r的值。...

2022-07-05 16:59:15 115

原创 【计算机网络】Tcp的三次握手和四次挥手

Tcp的三次握手和四次挥手过程解读

2022-07-03 18:14:41 402

原创 【多线程】线程安全保护机制

在JDK中,JAVA语言为了维持顺序内部的顺序化语义,也就是为了保证程序的最终运行结果需要和在单线程严格意义的顺序化环境下执行的结果一致,程序指令的执行顺序有可能和代码的顺序不一致,这个过程就称之为指令的重排序。总结,Lock锁相对synchronized使用更加灵活,它使用锁的策略包括可以一直请求锁,也可以尝试请求锁,可以使用带超时的尝试请求锁,还可以带中断的锁,使用lock更加灵活。你会发现,上述代码在正常情况下应该输出是0,但某些时候会出现和理想结果不一致的情况,此时,就表示线程出现了安全问题。...

2022-07-03 18:08:27 300

原创 【面试必看】链表的常见笔试题

1. 合并链表链接:https://leetcode.cn/problems/merge-two-sorted-lists2. 反转链表3. 链表中倒数第k个节点4. 删除链表的倒数第N个节点5. 相交链表6. 环形链表7. 回文链表8. 反转指定区间上范围的链表

2022-06-26 11:47:05 45

原创 【操作系统】「不得不看」线程的那些知识

(1)进程:即正在运行的程序,是操作系统进行资源分配的基本单位。单核CPU情况下,同一时刻只能运行一个进程;宏观上并行,微观上串行。(2)线程:又称为轻量级进程,是CPU的基本调度单位。(3)二者的区别:实现Runnable接口4.线程的静态方法线程休眠线程join5.守护线程线程分为两类:用户线程(前台线程)、守护线程(后台线程),如果程序中所有的前台线程都执行完毕了,后台线程会自动结束。(Java中的垃圾回回收器就i属于守护线程)执行结果:(1)并行和并发:(2)用

2022-06-25 19:54:51 472

原创 阿里云tomcat能启动,但是无法访问问题

​1.首先进入到你tomcat安装目录的bin目录下,启动tomcat我的tomcat安装目录是 /usr/local启动tomcat:2.两种方式检查tomcat是否启动成功(1)查看tomcat启动日志,日志记录在tomcat安装目录的 logs目录出现如下等字样表示启动成功:(2)查看tomcat进程出现如下字样表示启动成功:​2.防火强设置(active表示防火墙处于开启状态,此时是无法通过外网访问tomcat 的,需要开启防火墙,为了安全起见,通常我们只开启指定端口)注:开放指定

2022-06-18 14:51:42 23

原创 【计算机网路】网络基本原理

初识网络原理1.网络的作用是什么?网络是为实现进程和进程之间跨主机的通信。2.进程发送的数据?是如何达到网卡?进程发送的数据通过操作系统的网络协议栈,分两步发送数据:(1)向网卡中填充数据;(2)触发发送数据3.网卡是如何接收数据?网卡的接口将物理信号转化为数字信号,接收数据,同时,通过中断机制把控制权交给操作系统,操作系统再将数据交给进程。4.问题:数据是直接发送的么?(重点)数据是经过不断的封装之后才发送的,因此衍生了两种模型:理论模型:OSI七层模型实际模型:TCP/IP五

2022-05-25 21:36:44 126

原创 【数据结构】二叉树知识点详解

二叉树一、概念1. 1 定义一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。二叉树的子树有左右之分,其子树的次序不能颠倒,因此二叉树是有序树。如下图为一颗二叉树:1. 2 概念节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6;树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6叶子节点或终端节点:度为0的节点称

2022-05-20 20:44:18 284

原创 【数据库】事务的四大特性<详解>

2.数据没有提交前,对数据库中的所有操作都不会写进磁盘,一旦发生某些错误,数据将恢复到操作前的状态;1.事务开启后,一旦执行SQL语句出现错误,事务中所有的操作都将回滚到数据操作前;3.数据库使用事务时,提交事务后,如果发生某些SQL的执行错误,系统将自动回滚;事务是应用程序中一些列严密的操作,所有操作要么全部成功执行,要么全部执行失败。3.JDBC事务使用的四个场景。...

2022-04-08 21:55:31 924

原创 【排序算法】快速排序的详解

1.基准值默认选择左侧区间的第一个元素,也可以是其他位置元素;2.在快速排序中,当数组元素小于等于15时,进行插入排序优化算法;3.区间的定义一定要明确,边界值的判断要清晰。

2022-03-23 23:59:58 785

空空如也

空空如也

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

TA关注的人

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