![](https://img-blog.csdnimg.cn/582a2335ddc941c5b6ab4be110968876.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
学习笔记
文章平均质量分 55
记录自己的学习过程 方便以后查看
木木是木木
企鹅 28九 九 66九 31九
展开
-
SQL语句什么时候需要使用group by
SQL语句什么时候需要使用group by原创 2023-08-02 10:49:13 · 1281 阅读 · 0 评论 -
Java编程中如何输入单个char类型的字符
Java为各种类型提供了相应的输入方式,但是却没有`sc.nextCharcter()`,即char类型的输入方式,输入char字符的方式为:char c = sc.next().charAt(0);原创 2023-03-23 23:46:26 · 1812 阅读 · 0 评论 -
File类的用法和InputStream,OutputStream的用法
一、File类1.构造方法2.普通方法二、InputStream1.方法3.Scanner类的应用三、OutputStream1.方法3.PrintWriter类的应用。原创 2023-02-20 13:30:37 · 573 阅读 · 0 评论 -
synchronized和volatile区别是什么?
既然synchronized在大多数情况下,都可以保证线程安全,那直接无脑使用synchronized,是否可以?PS:线程安全的三大特性:原子性、内存可见性、指令重排序(有序性)。原创 2023-02-09 20:58:56 · 244 阅读 · 0 评论 -
synchronized和ReentrantLock之间的区别
synchronized 和 ReentrantLock 之间的区别。原创 2023-02-09 12:09:21 · 536 阅读 · 2 评论 -
当面试官问到你synchronized的原理时,别再一头雾水了
如果后续没有其他线程来竞争该锁,那么就不用进行其他同步操作了(避免了加锁解锁的开销)如果后续有其他线程来竞争该锁(刚才已经在锁对象中记录了当前锁属于哪个线程了,很容易识别当前申请锁的线程是不是之前记录的线程),那就取消原来的偏向锁状态,进入一般的轻量级锁状态。按照之前对于锁的设定,第二次加锁的时候,就会阻塞等待,直到第一次的锁被释放,才能获取到第二个锁,但是释放第一个锁也是由该线程来完成,结果这个线程已经躺平了,啥都不想干了,也就无法进行解锁操作,这时候就会。第一个尝试加锁的线程,优先进入偏向锁状态。原创 2023-02-08 12:08:53 · 515 阅读 · 0 评论 -
HashMap、HashTable和ConcurrentHashMap的区别
简单总结一下面试中常问的HashMap、HashTable和ConcurrentHashMap的区别。原创 2023-02-02 17:12:18 · 326 阅读 · 0 评论 -
一文带你深入了解线程池
简单来说,线程池就是提前创建好一批线程,当有任务的时候,从池子中取出一个线程去执行该任务,执行结束后,再把线程放回池子中,以备循环使用。原创 2023-01-12 10:43:32 · 641 阅读 · 0 评论 -
阻塞队列和生产者消费者模式的简单实现
若有一个生产者,两个(多个)消费者,如果生产者生产了一个数据。然后调用notifyAll(),唤醒了两个消费者,若我们使用的是if,那么程序接着从wait处执行,那么两个消费者都会从阻塞队列中取数据?但是实际上只有一个数据,这就产生了所谓的。一下是否有数据,第一个获得锁的对象判断为有数据,取出,第二个获得锁的对象接着判断,发现没数据了,继续进入阻塞状态。为什么阻塞队列的阻塞功能实现那里判断使用的是while而不是if?如果我们使用的是while,那么程序接着从wait处执行,会。原创 2023-01-07 11:46:07 · 139 阅读 · 0 评论 -
设计模式之单例模式
通俗来讲,设计模式其实就是一种设计思想,它针对一些特定场景下出现的问题,前人给咱们进行了总结,形成的一套通用的解决方法。单例模式是指只创建一次该对象的实例,在程序中如果我们需要多次使用该实例对象时,我们可以通过对应的get方法获取该对象,这种处理方式可以避免频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。原创 2023-01-06 23:26:29 · 446 阅读 · 0 评论 -
算术左移(<<)—逻辑左移(<<<)和算术右移(>>)—逻辑右移(>>>)
算术移位和逻辑移位使用细节原创 2023-01-05 10:15:24 · 3119 阅读 · 1 评论 -
Java 线程的六种状态及其简易转换
NEW:初始状态,线程被创建,但是还没有调用start()方法。> RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态笼统地称作“运行中”。BLOCKED:阻塞状态,表示线程阻塞于锁。WAITING:等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或中断)TIMED_WAITING:超时等待状态,该状态不同于 WAITING,它是可以在指定的时间自行返回的。TERMINATED:终止状态,表示当前线程已经执行完毕。原创 2022-12-22 15:23:57 · 641 阅读 · 1 评论 -
Java中Math.round()的用法
一句话结论:将括号内的数 + 0.5 向下取整即为输出。原创 2022-11-20 23:41:10 · 12405 阅读 · 7 评论 -
Map与Set总结:HashMap、HashSet、TreeMap、TreeSet
Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且K一定是唯一的,不能重复。Set是继承自Collection的接口类,Set中只存储了Key。原创 2022-11-17 16:51:59 · 150 阅读 · 0 评论 -
Java多线程总结:进程与线程、线程的创建、线程状态与分类、线程方法、线程同步
说的进程,先来提一下程序的概念:程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态概念。进程:进程是程序执行一次的过程,是一个动态概念,同时也是系统资源分配的基本单位。线程:线程是一个独立执行的路径,它包含在进程之中,通常情况下一个进程可以包含若干个线程,我们熟知的main就是一个主线程,当然一个进程中至少有一个线程,不然它就没有存在的意义了,线程是CPU调度的基本单位。再说说多线程,其实很多多线程都是模拟出来的,真正情况下的多线程是有多个CPU的,例如服务器等等,而 模拟出来的多线程,原创 2022-11-15 12:19:59 · 493 阅读 · 0 评论 -
Java集合:Map集合的几种常用遍历方式
使用 for-each 循环遍历 key 或者 values,一般适用于只需要 Map 中的 key 或者 value 时使用。性能上比 entrySet 较好。原创 2022-11-13 21:08:21 · 265 阅读 · 0 评论 -
排序算法:插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序、归并排序
排序算法相关总结,涉及的排序算法有:插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序。原创 2022-11-07 22:23:10 · 5297 阅读 · 4 评论 -
Java使用小堆模拟实现简单的优先队列
简单的使用堆模拟实现一下优先队列原创 2022-11-01 21:37:20 · 217 阅读 · 0 评论 -
堆 超详细的带图总结
本文详细介绍了堆的相关知识,首先,堆是在完全二叉树的基础上进行了条件的限制,即:每个节点都比其孩子节点大,则为大堆;每个节点都比其孩子节点小则为小堆。原创 2022-11-01 13:53:28 · 593 阅读 · 0 评论 -
二叉树的基本操作及其代码实现
本文实现了如下二叉树的基本操作:1.手动创建一棵二叉树 返回这棵树的根节点2.前序遍历3.中序遍历4.后序遍历5.迭代获取树中节点的个数6.递归获取节点的个数7.迭代获取叶子节点的个数8.递归获取叶子节点的个数9.获取第K层节点的个数10.获取二叉树的高度11.检测值为value的元素是否存在12.层序遍历13.判断一棵树是不是完全二叉树原创 2022-10-31 22:30:43 · 1225 阅读 · 0 评论 -
ArrayDeque和LinkedList的区别
我比较喜欢使用ArrayDeque或者LinkedList来模拟实现栈或者队列,但最近遇到了一个问题,在一段程序中,我使用LinkedList模拟时是正常的,使用ArrayDeque模拟会报空指针异常。原创 2022-10-26 15:48:00 · 1371 阅读 · 2 评论 -
二叉树的前、中、后序遍历和层序遍历的实现(递归 + 迭代)
该篇文章写了二叉树的四种遍历方式,分别对应力扣上的题目为144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历、102. 二叉树的层序遍历。原创 2022-10-24 21:57:09 · 457 阅读 · 0 评论 -
二分查找中关于mid定边界问题的解析(查找数组中小于等于特定值的元素的最大下标/大于等于特定值的元素的最小下标问题)
有时候写二分查找,我们会看见有的写 mid = (l + r) / 2,而有时候见到有人写 mid = (l + r +1) / 2,所以我有时候会心生疑问:我们究竟应该怎么写?这有什么规律吗?原创 2022-10-23 22:45:01 · 418 阅读 · 0 评论 -
Java中的链表(LinkedList)的简单实现
Java中的链表(LinkedList)的简单实现原创 2022-10-17 22:55:07 · 357 阅读 · 0 评论 -
Java中的顺序表(ArrayList)的简单实现
顺序表的简单介绍和简单简单简单的实现原创 2022-10-11 23:23:18 · 202 阅读 · 0 评论 -
获取字符串的前缀表代码实现
获取字符串的前缀表代码原创 2022-10-11 18:20:22 · 180 阅读 · 0 评论 -
实现两数交换的三种方法:普通方法、相加寄存器、位运算
实现两数交换的三种方法:普通方法、相加寄存器、位运算原创 2022-10-09 18:22:49 · 275 阅读 · 2 评论 -
Java中HashMap里面的getOrDefault() 方法的使用
作用:getOrDefault() 方法获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值。原创 2022-10-05 21:31:16 · 796 阅读 · 1 评论 -
Java之异常的详细总结
Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception:Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError,一旦发生回力乏术,程序就会直接退出;Exception:异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说的异常就是Exception。原创 2022-09-24 11:49:27 · 345 阅读 · 2 评论 -
Java中的String类详细总结
字符串内部是使用字符数组char[] value来存储内容的,字符串是一种线性表(线性表还包括数组、链表等)。原创 2022-09-22 08:59:05 · 447 阅读 · 1 评论 -
Java中的Object类
介绍Java中的Object类。原创 2022-09-22 09:00:00 · 220 阅读 · 1 评论 -
Java中常用的两大接口(Comparable、Clonable)、深浅拷贝的区别
打开Clonable接口的源码之后,我们发现该接口内部没有任何的抽象方法,这是一个空荡荡的接口(接口中不一定要有东西),没有任何抽象方法的接口称之为标记接口,它不可省略,JVM会识别所有带这个Cloneable接口的子类,打上可复制的标记。面试问题:什么是深浅拷贝、二者有什么区别?解答: 浅拷贝的概念:把一个对象中“最外层”的属性,拷贝一份,交给一个新对象,如果发现这个属性的值是基本数据类型,则把值完整拷贝一份,交给新对象,如果属性是引用类型,拷贝的就是内存地址交给新的对象,所以如果其中一个对象改变原创 2022-09-19 10:29:56 · 214 阅读 · 0 评论 -
Java中的抽象方法、抽象类和接口知识总结
Java中使用abstract关键字修饰的方法为抽象方法,抽象方法没有方法体,但反过来说只要没有方法体就是抽象方法这句话是错误的,Java中还有一类native方法(本地方法)没有方法体,比如public native hashCode()就是一个本地方法,该类方法其实是使用C++实现的,Java允许通过特定的方式来调用C++的方法。原创 2022-09-16 12:44:41 · 1178 阅读 · 0 评论 -
面向对象的三大特性之多态
今天给大家总结介绍一下面向对象的三大特性之一的多态。原创 2022-09-15 17:24:06 · 212 阅读 · 0 评论 -
Java中关键字final的用法细节详解
final关键字的意思:终结器,到此为止,最终。被final修饰的属性为最终属性,它的值无法修改,所以可以使用final关键字来定义常量。final修饰的属性可以是基本数据类型,也可以是引用数据类型。原创 2022-09-14 23:34:50 · 2046 阅读 · 0 评论 -
Java中类关键字super的用法详解
在继承关系中,只要在子类中定义了和父类名称相同的属性,无论其类型是否相同,调用的都是子类中覆盖后的变量。2.在子类中调用父类的方法代码示例:3.在子类中调用父类的构造方法使用注意事项如下:原创 2022-09-14 19:04:38 · 2119 阅读 · 0 评论 -
一道题让你秒懂Java中静态代码块、构造代码块、构造方法、普通代码块、main函数的执行顺序
静态代码块:用 staitc 声明,最早执行,JVM 加载类时执行,且仅执行一次。构造代码块:类中直接用 {} 定义,比构造函数早执行,它与构造函数类似,在每一次创建对象时执行。普通代码块:类中的普通方法,只有被调用才执行。构造方法:执行时间比构造代码块时间晚,也是在对象初始化的时候运行。原创 2022-09-13 23:06:15 · 448 阅读 · 0 评论 -
Java中String类的几种常见遍历方式
charAt(int index) :返回 char指定索引处的值。toCharArray() :将此字符串转换为新的字符数组。substring(int beginIndex, int endIndex) :返回一个字符串,该字符串是此字符串的子字符串。原创 2022-09-09 09:45:07 · 8323 阅读 · 0 评论 -
Java优先队列PriorityQueue中的方法和使用细节总结
今天稍稍了解了一下Java中的优先队列PriorityQueue,做了以下总结。原创 2022-09-07 17:59:01 · 632 阅读 · 0 评论 -
Java类中this关键字和static关键字的用法详解
今天给大家总结介绍一下Java类中关键字和关键字的用法。原创 2022-09-05 23:24:57 · 720 阅读 · 0 评论