- 博客(139)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《剑指Offer》Java版全系列笔记+刷题顺序(最新版,已完结~~)
本系列记录了剑指Offer每日刷题笔记(包含解题思路),顺序也是按照由易到难进行的。书山有路勤为径。希望和大家共同进步! 2021/10/15每天一更(2~3题),多多关注呀!第 1 天 栈与队列(简单)剑指 Offer 09. 用两个栈实现队列剑指 Offer 30. 包含min函数的栈...
2021-10-15 17:29:19
2163
29
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【小白入计网】第一章_计算机网络概述(所有计网笔记都在里面啦)
第一章 概述1.1 计算机网络在信息时代的作用数据传输软件共享硬件共享数据共享1.2 因特网概述 1 网络、互联网和因特网 2 因特网发展的三个阶段 1963年,从单个网络ARPANET项目联网发展 1985年,逐步建成三级结构的因特网 1993年,逐步形成了多层次ISP结构的互联网 3 因特网的组成 边缘部分由所有连接在因特网的主机组成。这部分是用户直接使用的,用来进行通讯(传输数据和视频等)和资源共享。** 核心部分由
2021-09-23 18:33:24
260
原创 Java传统线程和虚拟线程有什么区别?
虚拟线程是JDK 21中最受关注且对并发编程影响深远的特性。虚拟线程极大地降低了创建和管理线程的成本,允许开发人员轻松地编写和维护高并发应用程序。由于其轻量级特性,开发者可以创建大量的并发任务,而不会像传统线程那样面临线程上下文切换和内存消耗等问题。虚拟线程与Go语言中的协程类似,使得编写高并发、高吞吐量的应用程序变得更加简单和高效,尤其在处理I/O密集型任务时,能够显著提升系统的并发能力。综上所述,传统操作系统线程与Java虚拟线程的主要区别调度机制。
2024-04-18 18:27:01
1050
原创 敏捷开发是什么?敏捷开发的流程有什么?
敏捷开发是一种的软件开发方法论,它强调。敏捷开发采用短周期(称为“迭代”或“冲刺”)来开发、测试和交付可用的产品增量,并通过频繁的反馈和调整来优化过程和产品。
2024-04-11 15:10:50
587
原创 独立开发的基于springboot + websocket IM网站聊天系统总结
系统实现里基础聊天功能,另外特殊实现了随机匹配聊天扩展交友途径。其他方面有注册登录方面实现了分布式登录、密码加密存储、恶意登录拦截功能。个人资料卡方面实现了图片上传、图像在服务器端本地化存储和获取、信息修改功能。聊天方面实现了基本聊天功能,包括在线消息发送和接收、离线消息接收、消息本地化存储、最近联系人功能。好友方面实现了好友上下线状态推送、好友查找添加以及通知、查看对方资料卡功能。特色动态模块方面实现了随机匹配聊天、世界窗口聊天(可与所有在线者进行在线聊天)、网页娱乐游戏功能。.........
2022-08-03 08:00:00
1717
8
原创 基于SpringBoot的秒杀系统出现的BUG以及难点(总结)
文章目录1、通过注解判断参数vo是否为空,并做全局异常处理2、根据cookie访问页面,参数中没有user信息,如何实现User自动映射?3、redis通过RedisTemplate实现分布式锁解决预减库存4、application.yml中格式问题5、Maven中导包爆红
2022-05-09 09:00:00
1442
13
原创 【Java并发编程的艺术】读书笔记——Java中的线程池实现原理
1、为什么要使用线程池(优点)2、线程池的实现原理3、线程池的创建以及核心参数4、如何合理地创建线程池1、为什么要使用线程池(优点)避免重复的进行线程的创建和摧毁,可以减少不必要的资源开销;任务到达后,可以直接获取线程执行,提高了响应速度;可以交给线程池统一进行管理,提高线程的可管理性;2、线程池的实现原理当向线程池提交一个任务时,线程池是怎样处理这个任务的呢?ThreadPoolExecutor主要执行execute()来实现的,如下图:
2022-04-04 08:00:00
1279
15
原创 保存的密码忘记了,怎么办?快来围观~~
平时在网页上保存的密码,许久过后就忘记了,突然某天需要在别处用到的时候记不起来了…今天就手把手教你解决!!在流程之前,先和大家说明一下原理,方便后面的操作。基本原理:在我们点击登录的时候,他会向目标服务器发送一个数据包,其中就有它的登录用户名和密码,定位到数据包就可以查看我们的密码是什么了!!1.下载抓包软件就在电脑的软件商店搜索Wireshark下载。(ps:一般都会有,没有自行百度下载即可)2.开启抓包软件,进行抓包监听选择当前所用的网络输入过滤命令http.request.m.
2022-03-11 19:48:15
697
10
原创 【Java并发编程的艺术】读书笔记——Java并发编程基础
1、线程的几种状态线程在运行的生命周期中可能处于六种状态其一:新建(初始)、就绪、运行、等待、阻塞、终止。线程在自身的生命周期中,并不是固定地处于某个状态,而是**随着代码的执行在不同的状态之间进行切换**;Java 线程状态变迁
2021-12-25 13:36:17
794
32
原创 【Java并发编程的艺术】读书笔记——Java并发机制的实现原理(volatile和synchronized)
学习参考资料:《Java并发编程的艺术》文章目录1.volatile1.1volatile定义1.2volatile实现原理2.synchronized2.1synchronized简介2.2对象头2.3锁的升级2.4锁的对比3.原子操作的实现原理3.1什么是原子操作?3.2Java如何实现原子操作在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。1.volatile.
2021-12-23 14:50:14
659
27
原创 【Java并发编程的艺术】读书笔记——并发编程的挑战
学习参考资料:《Java并发编程的艺术》1.上下文切换单核处理器也支持多线程执行代码,CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。在切换之前会保存上一个任务的状态,以便之后切换回这个任务继续执行。1.多线程一定快吗不一定,因为线程有创建和上下文切换的开销。CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任.
2021-12-19 09:08:45
279
34
原创 【剑指 Offer】44. 数字序列中某一位的数字
第 61 日:数字序列中某一位的数字题目链接:https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/题目解题数学解题思路:详细代码如下: public int findNthDigit(int n) { long start=1; int digit=1; long count=9; while(n>count
2021-12-17 13:34:17
282
5
原创 【剑指 Offer】43. 1~n 整数中 1 出现的次数(详细解析)
第 60 日:1~n 整数中 1 出现的次数题目链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/题目解题数学、动态规划解题思路:详细代码如下: public int countDigitOne(int n) { int l=n/10,cur=n%10,r=0;//l代表高位 cur代表当前一位 r代表低位 int digit=1;//当
2021-12-17 13:17:47
373
1
原创 【剑指 Offer】14- II. 剪绳子 II(详细解析)
第 60 日:剪绳子 II题目链接:https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/题目解题贪心算法解题思路:详细代码如下:class Solution { public int cuttingRope(int n) { if(n==2) return 1; if(n==3) return 2; if(n==4) return 4; long res=1;
2021-12-17 13:15:57
453
2
原创 【深入理解JAVA虚拟机】读书笔记——线程安全与锁优化
学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》1.什么是线程安全当多个线程同时访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,以及不需要在调用时进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。2.线程安全的实现方式如何实现线程安全和代码的编写具有很大的关系,但虚拟机提供的同步和锁机制也至关重要2.1互斥同步同步是指当多个线程访问共享数据时,保证在同一时刻只有一个线程在使用共享数据.
2021-12-15 07:55:53
653
31
原创 【深入理解JAVA虚拟机】读书笔记——Java内存模型和线程
学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》1.Java内存模型需要注意Java内存模型指的是JMM,而不是运行时区域。1.1主内存和工作内存Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量存储到内存和从内存中取出变量值这样的底层细节。内存模型如下图,线程运行时会将代码所需要的运行时数据从工作内存中获取,所以工作内存会从主内存中复制相关数据。那么也就是如果两个线程同时复制了主内存的共享变量并进行了修改,如果不加以控制,可能就会发生并发问题
2021-12-12 08:39:41
288
35
原创 【剑指 Offer】51. 数组中的逆序对(详细解析)
第 57 日:数组中的逆序对题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/题目解题暴力破解解题思路:当然最容易想到的就是暴力破解喽,我先来替你们试一试!!详细代码如下:class Solution { public int reversePairs(int[] nums) { int count=0; for(int i=0;i<nums.length;i++){
2021-12-11 22:12:01
329
1
原创 【剑指 Offer】17. 打印从1到最大的n位数
第 57 日:打印从1到最大的n位数题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/题目解题循环解题思路:直接根据位数,求出他的边界,再循环存值就好了!详细代码如下:class Solution { public int[] printNumbers(int n) { int max=(int)Math.pow(10,n)-1; int[] res=ne
2021-12-11 22:11:14
209
3
原创 【剑指 Offer】60. n个骰子的点数
第 56 日:n个骰子的点数题目链接:https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/submissions/题目解题动态规划解题思路:我本身也是菜鸡,详细的推荐大佬解题文章:https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/solution/nge-tou-zi-de-dian-shu-dong-tai-gui-hua-ji-qi-yo-3/
2021-12-11 22:10:52
105
1
原创 【剑指 Offer】49. 丑数
第 56 日:49. 丑数题目链接:https://leetcode-cn.com/problems/chou-shu-lcof/题目解题动态规划解题思路:注意这一题的题目是只包含质因子2、3、5的数称为丑数,也就是说14这种并不是。丑数的因子都会包含2、3、5其中的一个,也可能包含多个,也可以全部包含,如下:nums2 = {1*2, 2*2, 3*2, 4*2, 5*2, 6*2, 8*2...}nums3 = {1*3, 2*3, 3*3, 4*3, 5*3, 6*3, 8
2021-12-11 22:10:15
306
1
原创 【剑指 Offer】19. 正则表达式匹配
第 55 日:正则表达式匹配题目链接:https://leetcode-cn.com/study-plan/lcof/?progress=mou43d3题目解题动态规划解题思路:怪我太菜,这题只能说一说我的理解:我认为如果使用动态规划的话,根据前面做题的经验就是在遍历时统计出对后面有用的信息。比如这题是要求主串是否和模式串匹配,那么就在遍历主串的时候判断当前遍历串是否和模式串匹配。然而遍历时串是否和模式串匹配又不是一下子可以求出来的,也要根据当前遍历时串的最后一个字符和上一次遍历串的结
2021-12-11 22:09:52
100
原创 【深入理解JAVA虚拟机】读书笔记——运行时栈帧结构
学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》运行时栈帧结构栈帧存储了方法的局部变量、操作数栈、动态连接、方法返回值和一些附加信息。每个方法从调用到结束都伴随着一个栈帧从入栈到出栈的过程。另外,在编译Java源代码时,一个栈帧的局部变量表的大小和操作数栈的深度就已经被确定了,并且写入Class文件中方法的Code属性。1.局部变量表(重点)作用局部变量表用于存放方法参数和方法内部定义的局部变量。组成局部变量表的最小单位是变量槽,一个变量槽可以存放32位以内的数据类.
2021-12-10 14:50:56
1337
26
原创 【深入理解JAVA虚拟机】读书笔记——虚拟机类加载过程和双亲委派模型
学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》我们知道Java代码经编译后会生成Class文件,然后都需要加载到虚拟机中才能被运行和使用。而虚拟机如何加载这些Class文件,Class文件中的信息进入到虚拟机会发生什么变化,接下来就会围绕这两个问题展开。1.类的生命周期一个类型从被加载到虚拟机中开始,到卸出内存,它的生命周期将会经历加载、验证、准备、解析、初始化、使用和卸载七个阶段,如下图。图中,加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类型的加载过程必须.
2021-12-07 09:39:10
1354
30
原创 【深入理解JAVA虚拟机】读书笔记——调优案例分析总结
学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》1.大内存硬件上的程序部署一般单体应用在较大内存的硬件方式,有下面两种:1)通过一个单独的Java虚拟机实例来管理大量的Java堆内存2)同时使用若干个Java虚拟机,建立逻辑集群利用资源第一种方法,看似没有太大问题,但前提是要把Full GC的频率降得很低(在夜间设置定时任务专门进行回收),因为在一个Java虚拟机管理较大堆内存时,一次Full GC会导致很长时间停顿。此外还应该考虑下面可能发生的问题:必须确保应用程序足够.
2021-12-05 10:33:02
2024
原创 【剑指 Offer】38. 字符串的排列(详细解析)
第 51 日:字符串的排列题目链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/题目解题遍历所有可能,HashSet去重解题思路:把字符串转化为字符数组,然后通过深度遍历两两交换不同位置的字符,将交换后的字符串存到HashSet中去重。这样就有所有的结果了。详细代码如下:class Solution { char[] cs; Set<String> res=new Hash
2021-12-04 11:46:48
829
4
原创 【深入理解JAVA虚拟机】读书笔记——垃圾收集器与内存分配策略
学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》垃圾收集(Garbage Collection),简称GC。在垃圾收集前必须需要先思考下面三件事情:那些内存需要回收?什么时候回收?怎样回收?后面也就会围绕解决这些事情的方法展开介绍。1.判断对象是否“死亡”算法在堆中存放着Java世界几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了1.1引用计数算法在.
2021-12-02 19:55:37
543
30
原创 【剑指 Offer】37. 序列化二叉树
第 48 日:序列化二叉树题目链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/题目解题层序遍历解题思路:在序列化时,节点间的数值使用特殊字符(如’,’)隔开反序列化时,将字符串按特殊字符分为字符数组,首先添加根结点,再分别添加左右子节点详细代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int
2021-12-01 22:41:29
87
原创 【剑指 Offer】59 - II. 队列的最大值
第 46 日:II. 队列的最大值题目链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/题目解题两个队列解题思路:一个队列实现左进右出,存放所有进来的数一个队列用来取最大值(每次取最大值可以直接取,不用计算),也就是入队之前把左边小于它的值删除,这样当最大值出队后,后面还是会实时的有此队列的最大值(队头)详细代码如下:class MaxQueue { Deque<Integer> q1
2021-12-01 22:32:24
294
原创 【剑指 Offer】59 - I. 滑动窗口的最大值(详细解析)
第 46 日:I. 滑动窗口的最大值题目链接:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/题目解题双向队列解题思路:第一时间想到的是暴力破解,但是暴力破解肯定没前途啊,后面又思考了很久~~使用双向队列,来存放窗口中的值,并且时刻保证队列中最左端为窗口数的最大值;如何实现?:窗口每次向右移动,添加数值到队尾并且将队尾左侧小于该数值的数移除。这样就保证了,队列头时刻为窗口里的最大值!!但
2021-12-01 22:22:38
374
原创 【深入理解JAVA虚拟机】读书笔记——Java内存区域与内存溢出异常
学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》1.运行时数据区域根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会分为以下几个运行时数据区域,如下图所示。其中每个线程有自己独自的虚拟机栈、本地方法栈、程序计数器1.1程序计数器程序计数器(Program Counter Register) 是一块较小的内存空间,通过改变这个计数器的值来选取下一条需要执行的字节码指令。刚才我们说程序计数器是私有的,这是因为Java虚拟机在执行多线程时,采用的是线程轮流切换,.
2021-12-01 16:56:59
1431
原创 SpringCloud学习笔记
学习参考视频:【狂神】SpringCloud文章目录一、为什么要学习微服务?二、SpringCloud概述SpringCloud是什么?SpringCloud核心子项目三、Eureka:服务发现与注册四、Ribbon:负载均衡五、Feign:负载均衡六、Hystrix:服务熔断、降级、限流七、Zull:网关一、为什么要学习微服务?此前学习的单体应用,这种简单的单元有很大的局限性。应用程序随着互联网日益壮大,业务需求不断增多,功能的追加扩展最终可能发展成庞然大物。最终导致代码耦合严重、复杂性增加、交.
2021-11-30 22:01:12
676
14
原创 Java学习之路的回顾与展望
Java学习之路的回顾与展望现在想来,我的学习之路还要从大二上学期开始,当时一直浑浑噩噩(上课就去凑个数,在宿舍就打游戏),过着一眼就能望穿整个大学生涯。现在还记得在偶然之间看见IT楠老师的视频,才认识到计算机专业是要做什么,也让我对未来有了大致的规划。由于当时本身比较厌恶学习,一直在行动与不行动之间徘徊,期间也看了无数的职业规划和大学回忆录的视频。最终,我决定迈出第一步,于是大二下学期开始了Java学习之路。直到现在,越学习就越是迷茫,迷茫了很久我决定在原地停一停,望望周围的风景,也回顾一下当初为何开
2021-11-29 09:03:01
1117
36
原创 【剑指 Offer】20. 表示数值的字符串(详细解析)
第 44 日:表示数值的字符串题目链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/submissions/题目解题有限状态自动机解题思路:使用有限状态自动机。根据字符类型和合法数值的特点,先定义状态,再画出状态转移图,最后编写代码即可。详细代码如下: public boolean isNumber(String s){ Map<Character,Integer>
2021-11-28 12:17:36
239
1
原创 【剑指 Offer】67. 把字符串转换成整数(详细解析)
第 44 日:把字符串转换成整数题目链接:https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/题目解题使用解题思路:详细代码如下:
2021-11-28 12:14:55
337
原创 【剑指 Offer】31. 栈的压入、弹出序列(详细解析)
第 43 日:栈的压入、弹出序列题目链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/题目解题模拟、双指针解题思路:如上图使用双指针指向两数组,并创建一个栈用来模拟入栈和出栈操作。1.将i所指元素进行入栈,并右移2.重复执行1操作,如果栈顶元素和pi指向元素相同,则将stack出栈3.最后执行完入栈和满足条件的出栈后,查看stack是否为空,如果为空返回true,否则返回false详细代码如
2021-11-26 22:33:19
680
原创 【剑指 Offer】29. 顺时针打印矩阵(详细解析)
第 43 日:顺时针打印矩阵题目链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/题目解题模拟解题思路:感觉这一题更偏向考察编程的逻辑方面,想象的执行情况如下图:上面的过程最重要的是解决运行过程中的边界问题,分别有:从外到内,共执行多少圈;每一圈的横竖的界限是多少;每一圈的起始位置(n+1,n+1);解决掉这些问题后,接下来就比较轻松了,使用(i,j)代表当前数的位置,每次小的循环执行一条
2021-11-26 22:02:45
109
原创 【剑指 Offer】62. 圆圈中最后剩下的数字(详细解析)
第 42 日:圆圈中最后剩下的数字题目链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/题目解题模拟链表解题思路:创建ArrayList并把元素全部添加,删除对应字符.。这种方法效率比较低,每次删除后还要将后面的数前移。时间复杂度:O(n)详细代码如下: class Solution { public int lastRemaining(int n
2021-11-26 08:35:07
174
2
原创 RabbitMQ在Linux服务器上安装并远程控制
安装1、准备安装包因为RabbitMQ是基于erlang开发的,所以还需要准备它的环境,所以还需要准备另外两个安装包。相关安装包下载地址:https://origami.lanzoux.com/b0ckwy54d,密码:7e5v2、进行安装执行安装命令传到Linux服务器上,使用rpm -ivh命令将上边三个进行安装复制配置文件到指定目录下cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /etc/r
2021-11-21 09:50:48
1166
6
原创 完整详细的Redis学习笔记
redis学习笔记一、redis相关概述redis属于非关系型数据库。1.关于非关系型数据库的介绍非关系型的数据库,也就是NoSQL(Not Only SQL)。关系型数据库:列+行,同一个表下数据的结构是一样的。非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展。NoSQL泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展
2021-11-20 10:03:08
2306
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人