自定义博客皮肤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 495 3

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

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

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

原创 计算机网络概念整理

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

2021-07-27 15:40:10 236

原创 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 128

原创 没有办法从零开始也不是胎教的 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 492 2

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

1.1 排序

2021-06-23 00:04:36 240 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 155

原创 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 220 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 227 1

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

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

2021-06-17 11:18:21 166 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 187

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

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

2021-06-15 18:04:27 1365

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

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

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

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

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

2021-06-10 21:43:57 177

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

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

2021-06-09 16:59:35 1080 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 436 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 249 8

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

五、文章删除

2021-04-10 11:57:17 206

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

三、用户登陆功能实现

2021-04-08 16:01:14 168

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

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

2021-04-07 19:31:39 324 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 135

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

题目:给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。示例 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 121

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

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

2021-03-18 10:33:06 157

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

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

2021-03-12 09:49:50 149

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

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

2021-03-07 13:26:30 118

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

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

2021-03-06 19:15:25 117 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 190 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 114

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

一、区域检索-数据不可变  给定一个整数数组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 111

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

二叉树的顺序存储

2021-01-31 22:38:45 150

原创 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 209

原创 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 206 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 209 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 415 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 155

原创 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 222 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 507 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 126

原创 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 123

原创 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 157

Web聊天室“项目实现

Web聊天室“项目实现

2021-06-03

空空如也

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

TA关注的人

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