![](https://img-blog.csdnimg.cn/a4e5ceaca3424ae99d2940794701de71.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 83
学习Java基础
Li_yizYa
持之以恒
展开
-
Java多线程~谈谈自己对于synchronized、volatile关键字的理解,线程的状态转换以及创建线程的方式
创建一个线程,线程就进入了NEW状态,当调用start方法时,进入RUNNABLE状态,如果调用了wait、join等方法时就进入WAITING、TIMED_WAITING状态,当多个线程竞争同一把锁时,竞争失败的线程进入BLOCKING状态,线程执行完成后,进入TERMINATED状态。这里的轻量级锁是通过CAS实现的,通过CAS检查并更新一块内存,如果更新成功表示加锁成功,如果更新失败,则认为锁被占用,继续自旋式的等待(并不放弃CPU).自旋操作是一直让CPU进行空转,比较浪费CPU资源。原创 2023-03-17 12:18:44 · 501 阅读 · 0 评论 -
分享一个降低时间复杂度的方法~除自身以外数组的乘积
给你一个整数数组nums,返回 数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据 保证 数组nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在O(n) 时间复杂度内完成此题。原创 2023-03-03 13:27:24 · 312 阅读 · 0 评论 -
浅谈对于封装、继承与多态的理解(Java)
在复习过程中,总结自己对于封装、继承、多态的理解,包括了如何在子类中访问父类的同名变量和方法,子类构造方法的定义与使用,根据代码块在继承顺序上的执行关系来谈谈初始化,在java中使用多态的条件、多态的体现以及多态的优缺点原创 2023-02-24 23:34:54 · 904 阅读 · 0 评论 -
Java~对于代码块与内部类的理解
在复习过程中浅谈自己对于代码块与内部类的理解原创 2023-02-22 23:52:09 · 503 阅读 · 0 评论 -
数据结构~七大排序算法(Java实现)
数据结构~七大排序算法~Java实现~直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、针对快速排序的优化、归并排序原创 2023-02-18 00:42:51 · 411 阅读 · 0 评论 -
LeetCode Hot 100~Day3
LeetCode Hot 100~原创 2022-12-26 23:00:37 · 373 阅读 · 0 评论 -
LeetCode Hot 100~Day2
leetcode Hot 100~原创 2022-12-23 23:05:34 · 1271 阅读 · 2 评论 -
LeetCode Hot 100~Day1
挑战十天完成leetcode hot 100~第一天原创 2022-12-12 01:06:28 · 366 阅读 · 0 评论 -
算法学习 | 回溯算法之深度优先搜索常见题型练习
深度优先搜索(Depth First Search):深度优先搜索属于图算法的一种,其过程主要是对每一个可能的分支路径深入到不能再深入到为止,而且每个节点只能访问一次。深度优先搜索本质上就是暴力搜索,遍历了所有可能的情况,必然能得到解。DFS搜索的流程是一个树的形式,每次一条路走到黑。原创 2022-11-27 22:22:22 · 1004 阅读 · 0 评论 -
算法学习 | 深度优先搜索~一条道走到黑
深度优先搜索(Depth First Search):深度优先搜索属于图算法的一种,其过程主要是对每一个可能的分支路径深入到不能再深入到为止,而且每个节点只能访问一次。深度优先搜索本质上就是暴力搜索,遍历了所有可能的情况,必然能得到解。DFS搜索的流程是一个树的形式,每次一条路走到黑。深度优先搜索的关键是解决“当下该如何做”,下一步的做法和当下的做法是一致的。“当下如何做”一般是尝试每一种可能,用for循环遍历对于每一种可能确定之后,继续走下一步,当前的剩余可能等到从下一步回退之后再处理。原创 2022-11-25 21:20:38 · 813 阅读 · 1 评论 -
买卖股票的最好时机(一、二)
买卖股票是经典的动态规划问题,在动态规划的学习与练习中,最重要的是定义状态并根据状态进行方程递推,分别以贪心思想和动态规划来解决买卖股票的最好时期一和二原创 2022-11-20 00:02:32 · 283 阅读 · 0 评论 -
算法学习 | 动态规划经典练习题合集
动态规划思想~带权值的最小路径和、背包问题(二)、分割回文串-ii、编辑距离原创 2022-10-28 23:33:18 · 2714 阅读 · 0 评论 -
算法学习 | 动态规划~大事化小、小事化了
动态规划算法思想总结以及相关OJ题练习记录:斐波那契数列、拆分词句、三角形、不同的路径数目(一)原创 2022-10-27 23:33:13 · 366 阅读 · 0 评论 -
算法学习 | 贪心算法~通过局部最优的选择来得到整体最优解
贪心算法思想总结以及贪心算法相关OJ题:选择排序、平衡字符串、买卖股票的最佳时机 II、跳跃游戏、最多可以参加的会议数目原创 2022-10-26 21:42:02 · 2180 阅读 · 1 评论 -
排序算法复习 | 插入排序(直接插入排序、希尔排序)与选择排序(直接选择排序、堆排序)
排序算法,直接插入排序,希尔排序,直接选择排序、堆排序,排序算法详解,时间复杂度空间复杂度分析,以及是否为稳定的排序算法原创 2022-10-19 23:15:25 · 331 阅读 · 0 评论 -
Java中的文件操作以及文件内容的读写
将数据从一个设备传输到另外一个设备就是io操作,i是input输入,o是output输出,在java中System.in是标准输入流、System.out是标准输出流、System.err是错误输出流。利用递归的方式,每次递归获取到的文件/目录都存在一个File类数组中,如果是目录则打印后继续递归遍历,如果是文件就直接打印。File类中常用的方法有创建文件、创建目录、文件/目录的删除、判断文件/目录是否存在、重命名文件等等。利用renameTo方法实现文件的移动,其原理也是文件的重命名。原创 2022-10-04 22:09:38 · 896 阅读 · 1 评论 -
Java多线程~synchronized原理以及优化
synchronized的基本特点、实现原理(monitor机制)、JVM对于synchronized的优化“锁升级”:无锁、偏向锁、轻量级锁、重量级锁;synchronized的其他的优化,锁消除与锁粗化原创 2022-09-24 21:58:30 · 528 阅读 · 0 评论 -
Java多线程~CAS的原理及其应用
CAS是乐观锁的一种实现,一个CAS涉及到的操作假设内存中的原数据V,旧的预期值A,要修改的的值B1.比较V与A的值是否相等(Compare)2.如果比较相等,则将B写入V(Swap)3.返回操作是否成功简单的说,CAS就是直接尝试修改变量,再返回修改的结果.比较读和写两个时间点主存中变量的值是否相等,如果相等就把要修改的值写回主存中,如果不相等就不做任何操作,修改成功返回true,修改失败就返回false。原创 2022-09-24 14:16:33 · 749 阅读 · 0 评论 -
Java多线程~常见的锁策略(乐观锁与悲观锁、读写锁、自旋锁、公平锁与非公平锁、可重入锁与不可重入锁)
常见的锁策略:乐观锁与悲观锁、读写锁、自旋锁、公平锁与非公平锁、可重入锁与不可重入锁原创 2022-09-23 22:58:01 · 494 阅读 · 0 评论 -
Java多线程~如何解决线程安全问题(volatile和synchronized)
总结产生线程安全的原因:原子性、可见性、有序性,以及解决线程安全问题的方法(volatile关键字与synchronized关键字).详细介绍两个关键字的用法和作用原创 2022-09-22 23:24:57 · 427 阅读 · 1 评论 -
Java多线程~线程的状态以及状态转移的条件
线程的六种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)、每种状态表示的含义以及状态之间的切换条件,各个状态转换的代码示例原创 2022-09-21 23:12:24 · 293 阅读 · 0 评论 -
JavaWeb~利用会话管理(基于Session+Cookie)来模拟实现用户登录以及敏感资源的访问
利用会话管理来模拟实现登录功能与敏感资源的访问,其中用户登录时,验证账号密码是否通过,如果通过,创建session并保存用户信息,对于敏感资源的访问,则通过验证session来实现.原创 2022-06-23 00:55:14 · 1632 阅读 · 0 评论 -
算法训练~替换空格、递归思想的应用(从尾到头打印链表、二叉树重建)
分享今日的算法学习:替换空格、从头到尾打印链表、重建二叉树,替换空格为字符串相关问题,主要要观察其特性并对其特性进行处理。从头到尾打印链表与重建二叉树都是利用递归的思想来解决的,对于递归的理解很有帮助,希望我的文章可以帮助到有需要的人...原创 2022-06-18 23:51:41 · 136 阅读 · 0 评论 -
JavaWeb开发~模拟简单的用户登录验证功能(实现一个请求路径,跳转或返回其他页面的内容)
前后端分离开发模式,分别以前端跳转与后端跳转的方式实现模拟简单的用户登录验证功能(实现一个请求路径,跳转或返回其他页面的内容),验证成功跳转到指定页面,验证失败则分为两种情况,前端跳转时提示账号密码错误;后端跳转时刷新当前页面......原创 2022-06-18 16:05:29 · 3690 阅读 · 0 评论 -
Java~算法训练之数组篇
数组的应用篇,二维数组中的查找、旋转数组的最小数字、调整数组顺序使奇数位于偶数前面、数组中出现次数超过一半的数字。对于数组的问题,其考察点可能有数组的特性观察,对于时间复杂度的把握,数组与查找算法的结合,数组与排序算法的结合,数组的简单算法设计等...原创 2022-06-17 22:51:25 · 265 阅读 · 1 评论 -
分享一道力扣困难题~寻找两个有序数组的中位数(Java)
在我一开始看到这个题目的时候,首先想到的方法就是合并两个数组,边合并边排序,之后取中间的数字即可,这种写法是简单,可是时间复杂度是O(m+n),而题目的要求是O(log (m+n)),显然这种方法是行不通的。 从最大值开始依次比较插入新的数组,完成后取中间值即可.这种解法的时间复杂度为题目要求的O(log (m+n)),且空间复杂度为O(1),显然优于第一种思路。该种思路的主要思想为二分思想,每比较一次就缩小一次范围,具体思路如下所示:首先,整体分为两种情...原创 2022-06-09 22:01:55 · 1673 阅读 · 6 评论 -
Java多线程~常见的锁策略(上)~乐观锁与悲观锁、读写锁、重量级锁与轻量级锁
乐观锁与悲观锁悲观锁乐观锁乐观锁好还是悲观锁好读写锁重量级锁与轻量级锁以悲观的心态看待线程冲突问题,所以每次都加锁操作共享变量。总是假设最坏的情况发生,每次去拿数据的时候都认为其他线程会对其进行修改,因此每次在拿数据的时候都进行上锁操作,这样其他线程想拿到这个数据就会阻塞直到它拿到锁假设数据一般情况下不会发生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突,则返回用户错误的信息,让用户决定应该怎么处理。以乐观的心态看待线程冲突问题,所以每次都不加锁(层序层..原创 2022-06-08 23:20:19 · 221 阅读 · 0 评论 -
Java多线程~什么是线程池?如何创建线程池?你可以自己实现一个线程池吗?
目录什么是线程池?如何创建线程池?普通创建快捷创建手动实现一个线程池什么是线程池?线程池是多线程案例中非常重要的一个部分,线程池的使用可以很好的减少每次启动、销毁线程的损耗.在之前的学习中,接触过字符串常量池以及数据库连接池,根据之前的认识,池的作用就是缓存。线程池,即初始化(new线程池对象的时候)就创建了一定数量的线程,这些创建的线程不断地从阻塞队列中取任务,相当于是消费者。其他线程(生产者)只需要不断提交任务到线程池中。举个例子来解释线程池线程池就相当原创 2022-05-28 23:37:46 · 264 阅读 · 0 评论 -
Java多线程~认识并手动实现一个定时器
目录定时器标准库中的定时器定时器的使用实现一个定时器定时器的构成核心接口schedulemailBox对象扫描器worker线程完整代码代码测试定时器定时器是软件开发中的一个重要组件,类似于一个闹钟,达到一个特定时间后,就执行某个指定好的代码。标准库中的定时器· 标准库提供了一个Timer类,Timer类的核心方法为schedule.· schedule方法包含两个参数,第一个参数指定将要执行的任务代码,第二个参数指定多长时间后执行这段代...原创 2022-05-25 23:49:27 · 239 阅读 · 0 评论 -
操作系统~按优先数调度算法实现处理器调度(Java)
目录一、实验目的二、实验原理三、算法流程图及关键算法解析1.算法流程图2.关键算法解析四、源代码及注释五、测试用例及测试代码一、实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。二、实验原理设计一个按优先数调度算法实现处理器调度的程序。(1) 假定系统有五个进程,每一个进程用一个进程..原创 2022-05-21 21:37:03 · 2731 阅读 · 1 评论 -
Java多线程~实现生产者与消费者模型(BlockingQueue阻塞队列的实现与应用演示)
目录阻塞队列阻塞队列是什么阻塞队列的作用阻塞队列的实现代码生产者与消费者模型具体代码运行结果阻塞队列阻塞队列是什么阻塞队列满足了队列的结构和特性(链式或数组结构,满足先进先出原则),同时也满足线程安全:①入队操作:如果队列满了,就需要等待;②出队操作:如果队列为空,就需要等待.阻塞队列的作用①“消峰”作用当生产过快时,消费者可能消费不过来,此时就需要阻塞队列来充当缓冲。例如快递公司派送快递,生产操作就相当于快递公司不断接受到需要寄出的包裹,消费操作原创 2022-05-21 19:29:22 · 732 阅读 · 0 评论 -
Java多线程~以“饿汉”与“懒汉”两种模式分别实现单例模式
目录什么是单例模式?如何通过代码实现单例模式?饿汉模式懒汉模式单线程版多线程版双重校验法什么是单例模式?单例模式是设计模式的一种,单例模式即:当某个类提供给别处使用时,只能使用同一个实例化对象。单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例.如何通过代码实现单例模式?利用私有的构造方法实现①饿汉式写法:静态变量初始化时就赋值②懒汉式写法:初始化时不赋值,等使用的时候如果没有初始化再初始化,这种写法可以说是线程不安全的,也可以说..原创 2022-05-21 01:18:20 · 213 阅读 · 0 评论 -
Java多线程~线程间的通信、线程的等待与唤醒、线程通信的模拟使用(面包店买卖面包案例)
目录线程间的通信线程通信的概念线程通信的使用方式wait()-让线程进行等待notify()-唤醒等待的线程notifyAll()-唤醒等待中的线程线程通信的应用案例完整代码运行结果线程间的通信多线程的优势是提高cpu的利用率,但使用时需要注意:当执行时间比较长的任务时,可能存在线程安全的问题,在以上的前提下,需要保证线程的执行有一定的顺序性,因此就有了线程通信的概念.线程通信的概念线程通信,就是一个以线程通知的方式,唤醒某些等待的线程(也可以在...原创 2022-05-16 12:07:54 · 363 阅读 · 0 评论 -
Java多线程~了解并解决多线程带来的风险——“线程安全问题”
目录线程安全问题线程不安全问题演示线程不安全的原因修改共享数据原子性可见性代码顺序性解决线程不安全问题synchronized关键字synchronized的作用synchronized的使用示例volatile关键字volatile的作用volatile的语法synchronized和volatile关键字使用示例synchronized解决线程安全问题示例volatile解决线程安全问题示例线程安全问题简单地说,如果多线..原创 2022-05-13 12:14:33 · 422 阅读 · 2 评论 -
MySQL~Java的数据库编程:JDBC(JDBC的环境配置以及使用)
目录JDBC的环境配置JDBC的使用步骤(Java操作数据库)建立数据库连接方式一:DriverManager方式二:DataSource(数据源/数据库连接池)DataSource与DriverManager的对比创建操作命令对象StatementStatementPreparedStatementCallableStatement执行SQL语句处理结果集释放资源JDBC实现查询操作完整代码什么是JDBC?JDBC即Jav...原创 2022-05-04 23:09:03 · 2889 阅读 · 0 评论 -
Java多线程~Thread类及其常见方法(线程的启动、等待、休眠、中断)
目录Thread类及常见方法Thread类的常见构造方法Thread的几个常见属性线程的启动-start()start()使用示例start()与run()的区别?等待一个线程-join()获取当前线程休眠当前线程线程的中断Thread类及常见方法Thread类是JVM用来管理线程的一个类,即每个线程都有一个唯一的Thread对象与之关联Thread类的常见构造方法· 线程构造方法的使用用来创建线程,具体的使用介绍在上篇博客有提到:创建线.原创 2022-05-02 22:22:10 · 2353 阅读 · 2 评论 -
Java多线程~认识进程与线程、掌握创建线程的方式
目录进程与线程进程什么是进程?进程管理进程的状态线程什么是线程?线程的实现方式进程与线程的关系Java线程和操作系统线程的关系多线程的优点和缺陷三种方式创建线程继承Thread自定义一个类继承Thread使用匿名内部类实现Runnable接口自定义一个类来实现Runnable接口匿名内部类实现实现Callable接口进程与线程进程什么是进程?进程是操作系统对一个正在运行的程序的一种抽象,也可以把进程看做程序的..原创 2022-04-27 00:16:31 · 372 阅读 · 4 评论 -
你了解直接进行访问的数据结构吗?一篇文章带你了解简单的哈希表的实现
目录哈希表哈希表的实现初始化计算负载因子哈希表的扩容哈希表的插入查找元素完整代码测试用例哈希表实现代码已上传至gitee中:点击查看代码哈希表哈希表(也称散列表):是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中的一个位置来访问,以加快查找速度。这个映射函数叫做哈希函数,存放记录的数组叫哈希表.例如集合{1,7,8,9,4,6}哈希函数设置为:hash(key) = key % capacity...原创 2022-04-11 22:50:43 · 617 阅读 · 2 评论 -
Java实现二叉查找树及其相关操作
目录二叉查找树初始化二叉查找树的查找二叉查找树的插入二叉查找树的删除二叉查找树的中序遍历findMax and findMin二叉查找树完整代码测试用例完整代码已上传至gitee中:gitee代码仓库二叉查找树二叉查找树,又称二叉排序树,亦称二叉搜索树,是数据结构中的一类。在一般情况下,查找效率比链表结构要高。二叉查找树的定义:一棵空树或具有如下性质的树:①若左子树不为空,则左子树上所有结点的值小于根结点的值;②若右子树不...原创 2022-04-10 23:03:08 · 1549 阅读 · 0 评论 -
优化后的快速排序(详解)
目录快速排序三数取中值分割法获得枢纽元快速排序的主例程直接插入排序代码快速排序完整代码快速排序快速排序是实践中的一种快速的排序算法,它的平均运行时间是O(N log N),该算法之所以特别快,是因为它有非常精炼和高度优化的内部循环。可以将快速排序和直接插入排序结合起来得到优化后的快速排序,当数据量较小时,如果继续利用快速排序对其进行排序操作,其效率比较低下,因为快速排序是递归的,因此当遇到很小的数组(N<=20)时,采用直接排序对其进行排序.三数取中值分..原创 2022-04-08 23:29:50 · 926 阅读 · 3 评论