自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 资源 (1)
  • 收藏
  • 关注

原创 并发编程概念整理

一、进程   定义:系统分配资源的最小单位,一个任务就是一个进程   组成:     (1)PID:进程的唯一身份标识     (2)进程的状态: 新建状态 —— 就绪状态 —— 运行状态 —— 阻塞状态 —— 销毁状态     (3)优先级:决定进程的执行顺序     (4)记账信息:为了进程的执行的相对公平     (5)上下文:保存本次的执行状态,以便下次仅需执行     (6)一组内存:指定进程需要使用的资源   并行和并发     并行:多个任务在多个CPU下,同时执行角左并行(宏观与微观都是同

2021-08-03 17:30:30 601 3

原创 SpringBoot 框架搭建 用户管理系统(附代码)

使用SpringBoot 框架搭建用户管理系统,代码附在文末 快~点这里来试试(●’◡’●) 1、项目解决问题   用户管理系统:用户的信息做统一的管理 2、需求功能分析 1、登录功能(普通管理员登陆、超级管理员的登录) 2、用户列表页面(普通用户的列表、超级管理员的列表页) 3、条件查询(组合条件查询、不定规则查询) 4、分页功能 5、添加功能(普通管理员的添加、超级管理员的添加) 6、单挑删除功能 7、多条删除功能 3、设计数据库 用户表: id int 自增, 姓名 varchar(5

2021-07-30 11:30:47 7534 4

原创 计算机网络概念整理

1、协议: 是网络交互的基础,是一种约定,规范双方的通讯行为用于保证网络传输双方能够正常通讯 2、协议的分层 (1)OSI 七层模型(从上到小的,下一层是为上一层服务的) 应用层 :将标准的数据转换成程序需要的格式 表示层:将设备的数据格式转化成标准的格式。 会话层:用来管理通讯双方之间的会话。 传输层:用来确保双方的数据可以正常传输 网络层:地址的管理和路由的选择 数据链路层:保证相邻节点之间的数据传递 物理层:将数字信号传递成为光电信号 (2)TCP/IP 四层模型 应用层:常用协议有 —— HT

2021-07-27 15:40:10 301

原创 MySQL概念整理

连接数据库指令:mysql - u用户名 -p密码 -h IP地址 -P 端口号 一、MySQL 基础使用 1、数据库操作: 查询数据库:show databases; 删除数据库:drop database db_name; 使用数据库:use db_name; 创建数据库:create database db_name character set utf8mb4; 2、表操作 创建表:create tables tables_name(字段1,字段2,…); 删除表:drop table table_n

2021-07-20 16:36:15 165

原创 没有办法从零开始也不是胎教的 SpringBoot 框架搭建个人博客项目实现(附代码)

使用SpringBoot 框架搭建个人博客代码附在文末 1、下载环境   首先在官网 https://start.spring.io/ 下载一个模板到本地,使用Spring Boot 2.4.8版, java 8,下载jar包,同时导入Spring Boot DevTools(热部署)、Lombok(快捷注释)、 Spring Web(网络项目需要用) 三个依赖;下次使用时,解压然后改文件名就可以了 2、安装依赖   我们创建的

2021-07-19 11:42:23 551 2

原创 Java编程 —— 常见的比较排序详解

1.1 排序

2021-06-23 00:04:36 293 1

原创 Java虚拟机 —— JVM

JVM部分大纲如下: 1、JVM组成5个部分 2、类加载机制(JVM加载 | 双亲委派模型 | 破坏双亲委派模型的三种情况) 3、垃圾回收 a ) 判断什么是垃圾? b ) 垃圾回收算法 c ) 垃圾处理器(7种 ,其中重点为 CMS 和 G1) 4、JMM(java内存模型)—— 让JVM高速运行的一种技术 JVM布局(HotSpot): 以jdk1.8为例,分为5个部分 1、堆 new Object() 所有的对象都是存在此区域,此区域也是JVM中最大的一块区域;JVM垃圾回收就是针对此区域。

2021-06-21 19:26:34 192

原创 Java并发编程 —— JUC(java.util.concurrent)下的常用类、线程安全容器(ConcurrentHashMap)

HashMap 相关的高频问题:底层实现结构、负载因子、哈西冲突的解决方案…、线程安全问题 HashMap 是非线程安全的容器 在JDK1.7 下会造成死循环 在JDK1.8 下会造成数据覆盖 HahsMap JDK1.7 死循环分析 HashMap 的存储结构为: 数组 + 链表/红黑树 当链表长度大于8,数组长度大于64时,会升级为红黑树 当链表长度小于6,会降级为链表 双线程在进行扩容时可能会出现循环引用,循环引用就会导致死循环 HashMap扩容代码如下(JDK1.7为头插) 使用Conc

2021-06-21 13:00:31 262 2

原创 Java并发编程 —— 锁策略

乐观锁 认为一般情况西不会发生冲突,只有在进行数据更新的时候,才会检测并发冲突,如果没有冲突则执行修改,如果有冲突则返回修改。 CAS(乐观锁的具体实现)Compare And Swap —— 比较并且交换 CAS中的三个组成部分: V(内存值)、A(旧值)、B(新值) 实现原理: V == A?true(没有并发冲突) —> V = B     false(并发冲突) —> 该线程将旧值A修改为此时内存中的V值,然后再进行一次比较 乐观锁的事项 Atomic* Atomic*(乐观锁的实现)

2021-06-18 11:27:51 276 1

原创 Java并发编程 —— 单例模式、自定义阻塞队列

提升程序的性能: 1、多线程 2、单例模式 单例模式 单例模式:整个程序的运行中只存储一个对象 简单来说,当我这个对象创建好了之后,在整个程序中,其他人想用的时候都用的是我创建的这个对象 单例模式的创建方式: 1、饿汉方式 —— 上来直接先创建一个对象 package ThreadLocal; /** * 饿汉方式 * */ public class ThreadLocalDemo80 { static class Singleton{ // 1、创建私有的构造函数.

2021-06-17 11:18:21 207 2

原创 Java并发编程 —— ThreadLocal

ThreadLocal 是线程级别的私有变量 需求一:使用最高效的方式实现两个Date(事件类型)的格式化 使用SimpleDateFormat得到时间格式化,写法如下: package ThreadLocal; import java.text.SimpleDateFormat; import java.util.Date; /** * SimpleDataFomart使用方法 * **/ public class ThreadLocalDemo64 { public static v

2021-06-16 19:25:30 241

原创 Java并发编程 —— 线程池

线程的缺点: 1、线程的创建需要开辟内存资源:本地方法栈、虚拟机栈、程序计数器等线程私有变量的内存。所以频繁的创建和消耗会带来一定的性能开销 2、使用线程不能友好的管理任务和友好的拒绝任务。在《阿里巴巴java开发手册》中要求,线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。 线程池:   定义:使用池化技术来管理和使用线程的技术,就叫做线程池 线程池的创建方式包含7种 创建方式一:创建固定个数的线程池 package ThreadPool; import java.util.concu

2021-06-15 18:04:27 1411

原创 Java并发编程 —— 死锁问题、线程等待

线程的状态转换流程: 死锁 定义:在多线程编程中(两个或两个以上的线程),因为资源抢占而造成资源无限等待的问题 线程和锁的关系 —— 1 对 多:一个线程可以拥有多把锁;而一把锁只能被一个线程拥有 排查死锁的工具: 1、jconsole 2、jvisualvm 3、jmc 手写一个死锁的关键步骤: 1、获取锁A 2、线程休眠 3、获取锁B package Thread; /** * 实现一个死锁 * */ public class ThreadDemo16 { public

2021-06-11 16:47:28 337 1

原创 Java并发编程 —— 使用synchronized 和Lock解决线程不安全问题

Volatile 轻量级解决“线程安全”的方案 private static volatile boolean flag = false; volatile作用: 1、禁止指令重排序 2、解决线程可见性的问题 如何解决?   根据线程的工作方式 —— 线程会先在自己的工作内存中找变量,如果在自己的工作内存中没有找到,再去主内存中找变量   使用了volatile后,当操作完变量后,会强制删除掉 ...

2021-06-10 21:43:57 210

原创 Java并发编程 —— 线程的启动、中断;线程的状态;多线程的线程安全问题

线程启动的方法 start和run方法的区别 1、run属于普通方法,start属于线程启动的方法 2、run方法可以执行多次,而start方法只能执行一次 线程中断 1、使用全局自定义的变量来终止线程 终止的方法比较温柔,在拿到终止指令后,需要执行完当前的指令之后才会终止线程 package Thread; /** * 使用全局自定义变量来终止线程 * */ public class ThreadDemo10 { // 全局自定义变量 private static boole

2021-06-09 16:59:35 1120 1

原创 Java并发编程 —— 线程的创建、线程休眠

进程vs线程: 1、进程是系统分配资源的最小单位;线程是系统调度的最小单位 2、一个进程中至少要包含一个线程 3、线程必须要依附于继承,线程是进程实质工作的一个最小单位 线程的创建方式: 1、继承Thread类 实现线程的创建(2种写法) 1.1种写法 public class ThreadDemo03 { static class MyThread extends Thread{ @Override public void run(){

2021-06-08 21:45:10 481 3

原创 从零开始,但又不是完全从零开始的也不那么胎教的”Web聊天室“项目实现(附代码)

最终整个项目的完整代码我会放在文末 整体流程总结: 1、新建项目准备 (1)创建maven项目;选择maven-archetype-webapp (2)修改WEB-INF下的web.xml;配置pom.xml下的依赖包 (3)在Setting的Plugins中安装Lombok(这个在本项目中的作用是不用再生成private的Get和Set的方法了) (4)还需要准备一些工具包放在webapp下,“css”、“fonts”和“js”的一些包,这些主要是构成前段页面的(我代码中有了) 2、需求分析 (1)打开主

2021-06-03 00:03:06 278 8

原创 从零开始的胎教“ 个人博客 ”项目搭建 —— 文章删除、文章添加、文章修改

五、文章删除

2021-04-10 11:57:17 275

原创 从零开始的胎教“ 个人博客 ”项目搭建 —— 登陆,个人文章列表

三、用户登陆功能实现

2021-04-08 16:01:14 205

原创 从零开始的胎教“ 个人博客 ”项目搭建 —— 项目创建,用户注册功能

搭建一个个人博客,使用的工具是IDEA 在进行项目之前,需要一些前置知识: 1、我们要使用tomcat这个工具对我们的代码进行部署,这个工具可以将我们的项目部署到网络,本项目暂时是将该项目部署在自己的局域网上 2、在IDEA中新建一个项目,新建项目的流程如下: ① 选取Maven栏(简单的理解就是一种项目管理工具),并勾选Create from archtype并如下选取,并执行next ② 给工程起名,这步不重要,起个英文名直接next ③ 这步比较关键,如下图所示User settings file

2021-04-07 19:31:39 398 2

原创 小彩笔的痛苦刷题日记 ——132模式

题目:   给定一个整数序列:a1, a2, …, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。 注意:n 的值小于15000。 示例1: 输入: [1, 2, 3, 4] 输出: False 解释: 序列中不存在132模式的子序列。 示例 2: 输入: [3, 1, 4, 2] 输出: True 解释: 序列中有 1 个13

2021-03-24 10:21:30 173

原创 小彩笔的痛苦刷题日记 ——扁平化嵌套列表迭代器

题目: 给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。 示例 1: 输入: [[1,1],2,[1,1]] 输出: [1,1,2,1,1] 解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。 示例 2: 输入: [1,[4,[6]]] 输出: [1,4,6] 解释: 通过重复调用 next 直到 ha

2021-03-23 11:38:36 160

原创 小彩笔的痛苦刷题日记 —— 反转链表Ⅱ

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 ````

2021-03-18 10:33:06 210

原创 小彩笔的痛苦刷题日记 ——验证二叉树的前序序列化

验证二叉树的前序序列化   序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 _9_ / \ 3 2 / \ / \ 4 1 # 6 / \ / \ / \ # # # # # #   例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗号分隔的序列,验证它是否是

2021-03-12 09:49:50 200

原创 小彩笔的痛苦刷题日记 ——分割回文串

分割回文串   给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。返回s的所有可能的分割方案。 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ] 回溯算法 1、画出树形结构,本题的递归树模型是一颗二叉树 2、编码 每一个节点表示剩余没有扫描到的字符串,产生分支是截取了剩余字符串的前缀 产生前缀字符串时,判断前缀字符串是否是回文 – 如果前缀字符串是回文,则可以产生分支和结点 – 如果前缀字符串不是回文,则不产生分支和结点,这一步是剪枝操作 如果叶

2021-03-07 13:26:30 153

原创 小彩笔的痛苦刷题日记 ——下一个更大元素

一、下一个更大元素 I   给两个没有重复元素的数组nums1和nums2,其中nums1是nums2的子集。请找出nums1中每个元素在nums2中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。 忽略数组nums1,对nums2中的每一个元素,求出其下一个更大的元素。随后将其放入HashMap,再遍历数组nums1,并直接找出答案。对于nums2,使用单调栈来找到每个元素的下一个更大元素。

2021-03-06 19:15:25 150 1

原创 小彩笔的痛苦刷题日记 —— 俄罗斯套娃信封问题

俄罗斯套娃信信封问题   给定一些标记了宽度和高度的信封,宽度和高度以 整数对 的形式(w, h)出现。当另一个信奉的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里吗,如同俄罗斯套娃。 请计算最多能有多少个信奉能组成一组“俄罗斯套娃”信封(不允许旋转信封) 示例: 输入: envelopes = [[5, 4],[6, 4],[6, 4],[2, 3] ] 输出: 3 解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。 解析:   该问

2021-03-04 14:33:47 283 1

原创 小彩笔的刷题痛苦日记 —— 比特位计数

比特位计数:   给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回 示例: 输入:2 输出:[0,1,1] 示例: 输入:5 输出:[0,1,1,2,1,2] 方法一:直接计算: 使用x = x&x(x-1)的方式,将x的二进制的最后一个1变为0 例如: 11 1 0 1 1 例如要统计11的二进制中1的个数,使用ones作为计数器 10 1 0 1 0 &am

2021-03-03 14:49:28 168

原创 小彩笔的刷题痛苦日记 —— 区域检索-数据不可变、二位区域和检索-矩阵不可变

一、区域检索-数据不可变   给定一个整数数组nums,求出数组从索引i到j(i≤j)范围内元素的综合,包含i、j两点。 实现NumArray类: NumArray(int[] nums)使用数组nums初始化对象 int sumRange(int i, int j) 返回数组 nums 从索引i 到j(i ≤ j)范围内元素的总和,包含i、j 两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j])) 解析:前缀和(preSum)   假设数组长度为N,定义一个长

2021-03-02 11:17:26 144

原创 JAVA学习记录(十九)—— 优先级队列(堆)、对象的比较

二叉树的顺序存储

2021-01-31 22:38:45 187

原创 JAVA学习记录(十八)—— 二叉树进阶习题

  1、递增顺序查找树:给你一个树,请你按中序遍历重新排列树,是树中最左边的结点现在是树的根,且每个节点没有左子节点,只有一个右子节点。力扣(LeetCode) 示例 : 输入:[5,3,6,2,4,null,8,1,null,null,null,7,9] 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 9 输出:[1,null,2,null,3,null,4,null,5,null,6

2021-01-29 20:07:35 241

原创 JAVA学习记录(十七)—— 二叉树基础、简单习题

树的表示形式 class Node{ int value; // 树中存储的数据 Node firstChild; // 第一个孩子引用 Node nextBrother; // 下一个兄弟引用 } 特殊的二叉树 1、满二叉树:每一个层的结点数都达到最大值,这个二叉树就是满二叉树。个二叉树的层数为K,且节点总数是2k−12^k - 12k−1,就是满二叉树。 2、完全二叉树:对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中

2021-01-27 19:24:47 250 1

原创 JAVA学习记录(十六)—— 栈、队列

1、栈(Stack) 一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。遵循先进后出原则 压栈:栈的插入操作叫做进栈/压栈/入栈 出栈:栈的删除操作叫做出栈 public class MyStack{ private int[] elem; private int top; //可以表示下标,也可以表示当前栈内有多少个元素 public MyStack(){ this.elem = new int[10]; // 这里默认给栈的大小为10

2021-01-25 16:10:23 230 2

原创 JAVA学习记录(十五)—— 集合、范型、List

泛型: 只存在于编译时期 意义:自动进行类型的检查;自动进行类型的转换 范式在 1、Java中,的集合类型包括ArrayList、LinkList、HashMap等,下列关于集合描述错误的是?(C) A.ArrayList和LinkedList均实现了List接口 B.ArrayList的访问速度比LinkedList快 C.随机添加和删除元素时,ArrayList的表现更佳 D.HashMap实现Map接口,它允许任何类型的键和值对象   解析:ArrayList是基于数组实现的,

2021-01-23 09:10:20 495 3

原创 小彩笔的刷题痛苦之旅 —— 将数组分成和相等的三个部分、二维网格迁移、找到小镇法官

题目:给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。 形式上,如果可以找出索引i+1 < j且满足A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1]就可以将数组三等分。 示例 1: 输入:[0,2,1,-6,6,-7,9,1,2,0,1] 输出:true 解释:0 + 2 + 1 = -6 + 6 -

2021-01-22 19:09:17 184

原创 JAVA学习记录(十四)—— String 类

字符串创建的方法 String str1 = "Hello world"; String str2 = new String("Hello world"); char[] array = {'a', 'b', 'c'}; String str3 = new String(array); 关于字符串比较相等的问题: String str1 = "abcde"; String str2 = new String("abcde"); System.out.println(str1 == str2); //

2021-01-20 17:07:43 257 1

原创 JAVA学习记录(十三)—— 图书管理系统

该系统总共有以下这么多个部分 一、book文件夹下: Book中有每一本书得信息,与这些信息的Get和Set方法,还有对于书的toString方法 package 一月十八日.图书管理系统.book; public class Book { private String name; //书名 private String author; //作者 private int price; //价格 private String type; //类型

2021-01-18 18:33:25 579 2

原创 Java学习记录(十二)—— 类_继承_多态_抽象类_接口

多态 // 打印形状 class Shape{ public void draw(){ } } // 打印矩形 class Rect extends Shape{ @Override public void draw(){ System.out.println("♦"); } } // 打印圆圈 class Circle extends Shape{ @Override public void draw(){ Syste

2021-01-17 20:03:52 156

原创 JAVA学习记录(十一)—— 无头双向非循环链表

双向链表与单向链表的区别是,单向链表的一个结点包含(当前节点的值val、指向下个结点的地址next);双向链表的一个结点包含(当前节点的值val、指向下个节点的地址Next、指向上一个结点的地址prev) class ListNode(){ // 也可以使用public进行修饰 // 但是双链表使用private,为了熟悉一下使用get和set操作 private int val; private ListNode next; private ListNode pre

2021-01-10 09:29:11 158

原创 JAVA学习记录(十)—— 无头单项非循环链表相关习题

一、反转一个单链表 思路:定义三个结点 1、cur 作为遍历整个链表的引用 2、prev 代表当前需要翻转的 3、curNext 代表需要翻转的下一个节点 public Node reverseList(){ Node cur = this.head; Node prev = null; Node newHead = null; while(cur != null){ Node curNext = cur.next; if(curNext

2021-01-09 11:28:11 189

Web聊天室“项目实现

Web聊天室“项目实现

2021-06-03

空空如也

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

TA关注的人

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