自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL数据库相关

面试题数据库查询很慢,有什么优化方法?1.查询时,尽量不要使用select *2.最有效的手段是在频繁使用、需要排序的字段上建立索引3.查询时,尽量满足最左前缀法则。4.like 模糊查询时 百分号放在后面可以走索引5.order by 使用的字段放在最后可以使用到索引数据库有哪些存储引擎?以及他们的区别?MySQL有两种存储引擎,分别是InnoDB和MyISAM他们的区别是:1.MyISAM不支持事务,InnoDB支持事务2.MyISAM不支持外键,In.

2021-09-10 10:43:17 92

原创 Java基础类之String源码分析

面试某东的时候,面试官问String底层是如何实现的,我脑子有点空,没有回答上来,现在来分析一下String底层源码简介String类是Java中的不可变字符串类,这种不可变性主要是因为内部属性private final char value[]字段是用final关键字修饰的,以及没有任何修改char[]的方法。另外,String类也是用final修饰的,说明研发者不希望这个类被继承。学习和面试中也经常会问到String相关知识点。继承结构这里可以看出String实现了Serializ.

2021-09-07 12:00:37 135

原创 Redis相关问题

缓存穿透问题问题描述:在访问数据时,key对应的数据在缓存中和数据库中都不存在,每次针对此key的请求在缓存中获取不到,请求就会直接打到数据库上,数据库查不到数据,没发写缓存,所以下一次还会打到数据库上。此时,缓存起不到作用,每次请求都会走数据库,流量大时数据库可能被打挂。此时缓存好像被穿透一样,起不到任何作用。解决方案:1.对空值进行缓存。当查询缓存和数据库都没有查询到值时,返回的数据为空,我们仍然可以把空值写进缓存中,但是设置较短的过期时间,最长不超过五分钟。2.接口校验。在正常业..

2021-09-07 11:13:55 103

原创 计算机网络相关知识总结

本文主要参考:(5条消息) 太厉害了,终于有人能把TCP/IP 协议讲的明明白白了_vincent-CSDN博客1.OSI七层结构、TCP/IP四层结构、五层协议结构 (这些要背一下)OSI七层结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP四层结构:链路层、网络层、传输层、应用层五层结构:物理层、数据链路层、网络层、运输层、应用层注:这里是按照从下往上的循序2.关于传输层中TCP和UDP的理解TCP是面向连接的、可靠的数据流传输协议。流就是..

2021-08-20 16:52:16 110

原创 MySQL

索引就是排好序的数据结构MyISAM存储引擎表数据存储在MYD文件中,索引存在MYI文件中MyISAM叶子节点存储的是 key+地址(这个地址是磁盘文件的地址)Innodb存储引擎底层是使用B+树存储的,叶子节点存储key+数据 图中展示的是主键索引普通索引是B树和B+树的区别1.B树中叶子节点没有双向指针。2.B+树把数据都存储在叶子节点,叶子节点存储索引和数据,非叶子节点只存储索引 B数的节点都存储的key+数据为什么建议Inno...

2021-08-09 20:26:54 150

原创 Java简单集合之ArrayList源码分析

简介ArrayList是Java集合框架中List接口的一个实现类。底层是数组,相当于动态数组。与Java中的数组相比,它的容量能够动态增长。ArrayList是Vector的翻版,区别在于ArrayList是线程不安全的,而Vector则是线程安全的。但是Vector是一个较老的集合,在Java中属于保留的集合类,其具有很多缺点,不建议使用。 ArrayList可以说是我们使用最多的List集合,它有以下特点: 1.它是基于数组实...

2021-08-06 10:37:48 142

转载 Java同步器之CyclicBarrier源码分析

文章参考:AQS源码探究_08 CyclicBarrier源码分析_兴趣使然的草帽路飞-CSDN博客简介CyclicBarrier,回环栅栏,它会阻塞一组线程直到这些线程同时达到某个条件才继续执行。它与CountDownLatch很类似,但又不同,CountDownLatch需要调用countDown()方法触发事件,而CyclicBarrier不需要,它就像一个栅栏一样,当一组线程到达栅栏处才能继续往下走。使用案例public class CyclicBarrierTest {

2021-08-05 17:58:03 90

原创 Java同步器之CountDownLatch源码分析

问题1.CountDownLatch是什么?2.CountDownLatch具有哪些特性?3.CountDownLatch通常运用在什么场景中?4.CountDownLatch的具体次数是否可以调整简介CountDownLatch,可以翻译为倒计时器,但是也不太准确,它的含义主要是允许一个或多个线程等待其他线程的操作执行完毕后再执行后续的操作。CountDownLatch的用法和Thread.join()有点类似,等待其他线程都执行完成后再执行主任务。继承结构Coun

2021-08-05 11:14:08 76

原创 Java同步器之ReentrantLock源码解析2

问题(1)条件锁是什么?(2)条件锁适用于什么场景?(3)条件锁的await()是在其它线程signal()的时候唤醒的吗?简介条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件出现才可以继续处理时使用的一种锁。比如,在阻塞队列中,当队列中没有元素的时候是无法弹出一个元素的,这时候就需要阻塞在条件notEmpty上,等待其他线程往里面放入一个元素后,唤醒这个条件notEmpty,当前线程才可以继续去做弹出元素的行为。注意,这里的条件,必须是在获取锁之后去等待

2021-08-04 15:54:59 60

原创 Java同步器之ReentrantLock源码分析1

文章部分参考彭哥读源码。问题(1)重入锁是什么?(2)ReentrantLock如何实现重入锁?(3)ReentrantLock为什么默认是非公平模式?(4)ReentrantLock除了可重入还有哪些特性?简介Reentrant = Re + entrant,Re是重复、又、再的意思,entrant是enter的名词或者形容词形式,翻译为进入者或者可进入的,所以Reentrant翻译为可重复进入的、可再次进入的,因此ReentrantLock翻译为重入锁或者再入锁。重入锁,

2021-08-04 14:19:57 69

原创 Java同步系列之AbstractQueuedSynchronizer源码分析3

文章参考:(4条消息) AQS源码探究_04 成员方法解析(释放锁、响应中断出队逻辑)_兴趣使然的草帽路飞-CSDN博客AQS成员方法解析(释放锁的逻辑)1.unlock释放锁方法 //位于ReentrantLock中:释放锁的方法 public void unlock() { //调用AQS中的release方法 sync.release(1); }2.release真正释放锁的方法 //ReentrantLock.unl

2021-08-04 10:21:15 113

原创 Java同步系列之AbstractQueuedSynchronizer源码分析1

文章参考:(4条消息) AQS源码探究_02 AQS简介及属性分析_兴趣使然的草帽路飞-CSDN博客1.简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为Java中几乎所有的锁和同步器提供一个基础框架。 AQS是基于FIFO的队列实现的,并且内部维护了一个状态变量state,通过原子更新这个状态变量state即可以实现加锁解锁操作。 2.主要属性 //队列的头结点:任何时刻,头结点对应的线程就是当前持有锁的线程 private

2021-08-03 16:54:50 121

原创 Java同步系列之AbstractQueuedSynchronizer源码分析2

简介

2021-08-03 16:36:47 82

原创 Java同步系列之synchronized

面试题:谈谈你对synchronized的理解可以从synchronized的特性,实现原理,是否可重入,是否是公平锁,synchronized的优化,锁升级的过程,synchronized的使用方式来说。简介synchronized关键字是Java里面最基本的同步手段,它经过编译之后,会在同步块的前后分别生成monitorenter和monitorexit字节码指令,这两个字节码指令都需要一个引用类型的参数来指明要锁定和解锁的对象。实现原理在学习Java内存模型的时候,我们介绍过两个指

2021-07-30 16:10:17 152

原创 Java同步系列之volatile

面试题:说说你对volatile的理解?说出三个点1.保证可见性 2.不能保证原子性 3.禁止指令重排序简介volatile是Java中的一个关键字,volatile可以说是Java虚拟机提供的最轻量级的同步机制。当一个变量被定义成volatile之后,它就保证了此变量对所有线程的可见性,另外volatile并不能保证原子性,还有一个特性就是它能禁止指令重排序。面试官问时,可以这样说,然后再说如何保证可见性和怎样能禁止指令重排序,里面的原理是什么?volatile保证可见性...

2021-07-30 11:30:41 164

原创 Java同步系列之JMM

Java内存模型(Java Memory Model,JMM)是在硬件内存模型基础上更高层的抽象,它屏蔽了各种硬件和操作系统对内存访问的差异性,从而实现让Java程序在各种平台下都能达到一致的并发效果。Java内存模型定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出这样的底层细节。这里所说的变量包括实例字段、静态字段,但不包括局部变量和方法参数,因为它们是线程私有的,它们不会被共享,自然不存在竞争问题。...

2021-07-30 09:24:01 101

原创 Java原子类之AtomicReference源码分析

简介AtomicReference是Java并发包下提供的一个带泛型的原子引用类,相比于AtomicInteger,是对整型数据操作,AtomicReference是对引用类型进行操作的。源码分析主要属性 //序列化号 private static final long serialVersionUID = -1848883965231344442L; //获取Unsafe对象实例 private static final Unsafe unsafe = U

2021-07-28 22:59:49 159

原创 Java原子类之AtomicInteger源码分析

简介AtomicInteger是Java并发包下提供的原子整数类,主要操作的是int类型的整数,底层是通过调用Unsafe的CAS,volatile关键字,自选锁思想等方法多线程情况下实现原子操作,保证安全性。继承结构继承Number抽象类,使得其有转换其他类型的方法。原子操作原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程上下文切换。原子操作可以是一个步骤,也可以是多个步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部

2021-07-28 21:48:02 230

原创 Java基础类之Integer类源码分析

一、简介Integer类对基础类型int进行了包装,

2021-07-28 20:11:03 153

原创 Java并发集合类之CopyOnWriteArraySet源码分析

简介 CopyOnWriteArraySet底层是用CopyOnWriteArrayList存储元素的,并不是使用Map来存储元素的,但是我们知道CopyOnWriteArrayList底层其实是一个数组,它是允许元素重复的,那么用它来实现CopyOnWriteArraySet是怎么保证元素不重复呢?继承结构源码分析Set类的源码比较少,其中的方法大多数是调用CopyOnWriteArrayList中的方法实现,这里直接贴源码一行一行分析。public class ...

2021-07-28 10:49:16 127

原创 Java并发集合类CopyOnWriteArrayList源码分析

简介 CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样就保证了只阻塞写操作,不阻塞读操作,实现了读写分离。继承体系CopyOnWriteArrayList实现了List,Cloneabele,Serializable,RandomAccess接口CopyOnWriteArrayList实现了List接口,提供了基础的添加,删除,遍历等操作CopyO...

2021-07-28 09:38:52 101

原创 面试题6:合并两个排序的链表

一.题目描述输入单链表的头节点,判断单链表是否有环二.题目思路实现思路1.定义fast和slow指针,并且设置初始值为单链表的头节点2.让fast指针每次往后走两步,slow指针每次往后走一步。3.循环指针步骤2,如果fast指针指向的节点为null或者fast指针指向节点的下一个节点为null,则证明单链表无环,如果fast指针和slow指针指向了同一个节点,则证明单链表有环三.代码实现————————————————版权声明:本文...

2021-06-15 16:58:45 95 1

原创 面试题5:获得两个单链表相交的第一个交点

一.题目描述从单链表中,取出环的起始点二.题目思路实现思路1.获得带环单链表中环的长度,记为length2.定义first和second指针,并且设置初始值为单链表的首节点3.让first指针往后移动length次4.定义一个循环,每次让first指针和second指针往后移动一次,当first和second指针指向的是同一个节点时,就停止循环此时first和second指针指向的节点就是带环单链表中环的起始点三.代码实现...

2021-05-27 22:05:45 204

原创 面试题4:从单链表中,取出环的起始点

一.题目描述 输入单链表的头节点,判断单链表是否有环二.题目思路实现思路 三.代码实现

2021-05-27 21:02:41 96

原创 面试题3:从有环单链表中,获取环的长度

一.题目描述 从有环的单链表中,获取环的长度在上一个判断单链表是否有环的代码中,我们可以得到fast指针和slow指针相同时的相交节点,我们可以利用相交节点,对这个相交节点进行循环遍历。二.题目思路实现步骤:1.获得快慢指针相交的节点meetNode2.从meetNode开始遍历环中的节点,当遍历出来的接地指向的是meetNode时,就停止遍历操作。此时遍历的次数就是环中节点的个数三.代码实现首先获取快慢指针相交的节点 /** * 从有环的链表中,获得...

2021-05-26 21:39:43 237

原创 面试题2:判断单链表是否有环

一.题目描述 输入单链表的头节点,判断单链表是否有环二.题目思路实现思路 1.定义fast和slow指针,并且设置初始值为单链表的头节点 2.让fast指针每次往后走两步,slow指针每次往后走一步。 3.循环指针步骤2,如果fast指针指向的节点为null或者fast指针指向节点的下一个节点为null,则证明单链表无环,如果fast指针和slow指针指向了同一个节点,则证明单链表有环三.代码实现Node类public cl...

2021-05-26 20:51:18 151

原创 面试题1-从头到尾打印单链表

一.题目描述输入一个链表头结点,按照从尾到头的顺序打印。二.题目思路这里提供三个思路: 第一种方法:使用栈的方式 利用栈的特点 先进后出 后进先出 第二种方法:采用递归的方式 第三种方法:反转单链表后,打印链表三.题目实现Node类public class Node { //用于保存节点中的数据 private Object data; //用于保存下一个节点的地址值 private Node next; ...

2021-05-26 11:54:17 342

原创 设计模式-单例模式

单例模式: 主要: 懒汉式(线程安全,调用效率不高,但是能够延迟加载) 饿汉式(线程安全,调用效率高,但是不能延迟加载) 优化: 双重检查锁(不建议使用) 静态内部类: — 外部类没有static属性,不会像饿汉式那样立即加载对象 — 只有真正的调用getInstance()方法,才会加载静态内部类。加载类是线程安全的。instance是static ...

2020-09-14 15:00:46 81

原创 Java-数组的学习总结

一.数组1.1数组的定义 数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素都可以通过一个数组下标来访问数组中的元素。 数组的声明 type[ ] arr_name; 方式一(推荐使用这种方式) type arr_name[ ]; ...

2020-04-28 23:21:37 142

原创 Java-面向对象的内存分析

一.JAVA虚拟机内存模型概念 java虚拟机内存模型二.从属于线程的内存区域(栈,计数器) JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;我们将这部分归为一类。 ...

2020-04-28 11:33:48 109

原创 Java-基本数据类型学习总结

基本数据类型(primitive data type)Java的基本数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)Java中定义了三类8种基本数据类型1.数值型- byte、short、int、long、float、double2.字符型- char3.布尔型- boolean...

2020-04-27 17:30:14 430

原创 Java-面向对象知识汇总

目录一.类和对象 1.1.面向对象和面向过程的区别 2.1.类的定义 3.1. 对象二.面向对象的三大特征2.1 继承2.2 封装2.3 多态四.特殊类 4.1 抽象类 4.2 接口一.类和对象 1.1.面向对象和面向过程的区别 1.1.1.区别:面向过...

2020-04-12 13:02:47 73

原创 Java-封装的学习使用

java是使用“访问控制符”;来控制哪些细节需要封装,哪些细节需要暴露的。private default protected public1. private 表示私有,只有自己类能访问2. default 表示没有修饰符修饰,只有同一个包的类能访问3. protected表示可以被同一个包的类以及其他包中的子类访问4. public表示可以被该项目的所有包中的所有类...

2020-04-09 23:13:32 82

原创 关于java中面向对象的学习

1. 面向对象的三大特征是什么? a.继承 b.封装 c.多态2. 继承的两个主要作用是什么? a.实现代码复用,更加容易实现类的扩展 b.方便建模3. JAVA中实现继承是哪个关键词? extends4. JAVA中的类继承,是单继承还是多继承?JAVA中其他地方有多继承吗? 单继承 接口有多继承5. 子类继承父类可以获得...

2020-04-09 16:15:15 92

原创 java中构造方法的4个要点

构造方法也是方法,只是一种特殊的方法一.要点 1.构造器通过new关键字调用!! 2.构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。 3.如果我们没有定义构造器,则编译器会自动定义一个无参的构造方法。如果已定义则编译器不会自动添加! 4.构造器的方法名必须和类名一致。...

2020-04-07 22:46:45 803

原创 关于Java中类执行时的内存变化以及整个执行过程的介绍

一.代码示例编写Person类public class Person{ String name; int age; public void show(){ System.out.println("姓名:"+name+",年龄:"+age); }}创建Person类对象并使用public class TestPe...

2020-04-07 22:02:29 187

原创 虚拟机栈、堆、方法区的特点。

一.虚拟机栈的特点如下: 1.栈描述的是方法执行的内存模型。每个方法被调用时都会在栈内创建一个栈帧(用来存储局部变量,操作数,方法出口等) 2.JVM为lei每个线程创建一个栈,用于存放该线程执行方法的信息(用户存放实际参数,局部变量等) 3.栈属于线程私有,不能实现线程间的共享! 4.栈的存储特性是“先进后出,后进先出” 5.栈是由系统...

2020-04-07 17:45:15 367

原创 关于python中PyInstaller包安装错误问题

经过了一个月的python学习,还是个菜鸡,感觉学的知识很快就忘了,楼主就做了一个简易的记事本程序,想打包成exe文件时,出现了问题。楼主在网上找了很多方法,最后成功了,现在把方法写出来1.在官网下载PyInstaller3.6安装包,解压后放入到python的安装路径2.然后cmd进入python的安装路径下的PyInstaller3.6文件夹3.然后使用python set...

2020-03-11 01:38:42 453 3

空空如也

空空如也

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

TA关注的人

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