- 博客(38)
- 收藏
- 关注
原创 【容器vs虚拟机】
在Linux重,容器是一种进程隔离的技术,应用可以运行在一个个相互隔离的容器中,与虚拟机不同的是,这些应用运行时公用着一个Kernel(内核),容器技术大大提升了对系统资源的利用率,也提高了应用部署的迁移效率。前文提到的Docker,它是容器的运行平台,Docker同时又是容器的管理工具。
2023-09-07 14:37:45
430
原创 软件架构之前后端分离架构&服务器端高并发演进之路
这样的前后端分离架构,使得在消耗计算机硬件如高性能、高可用方面能够有效剥离出来,只用一心一意的考虑把后端代码达到性能更优。下面介绍服务器端的性能优化演进之路。
2023-09-05 22:11:32
2717
原创 了解 JVM 中几个相关问题 — JVM 内存布局、类加载机制、垃圾回收
了解 JVM 中几个相关问题 — JVM 内存布局、类加载机制、垃圾回收
2022-06-26 11:57:42
374
原创 Java文件操作 —— IO
硬盘的基本构造:但是受限于机械硬盘的硬件结构,盘片的转速不可能无限高,机械硬盘的读写速度难以再提升更快的速度,只能在容量扩充方向发展。固态硬盘(SSD):固态硬盘的读写速度要比机械硬盘高很多。整体的文件系统,就是如上图这样一种树形的结构,如果是一个普通文件,就是树的叶子节点;如果是一个目录文件,目录文件就可以包含子树,这个目录就是非叶子节点;每个目录文件中可以包含多个文件,所以称为一个 N叉 树。路径分为两种:绝对路径 — 以盘符开头从树型结构的角度来看,树中的每个结点都可以被一条从根开始,一直到达
2022-06-19 12:02:17
638
原创 计算机网络—网络原理之<TCP/IP 五层协议 >图解+详述
计算机网络原理之,每一层的协议介绍,包括详细介绍 TCP中可靠性机制“三次握手,四次挥手”,图解+细节+划重点 。
2022-06-19 12:01:07
9794
1
原创 计算机网络 — 网络原理之初始(包含图解数据传输“封装和分用”详细过程)
进行有效的通信,前提就是能够明确通信协议。网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。本质上就是约定:发出的数据是什么样的格式,接收方就按照对应格式来进行解析。(这样才能保证接收方能读懂发送方的信息)
2022-05-31 22:51:26
1609
2
原创 Cookie 和 Session 工作流程
基于以上关于:在 HTTP 前后端交互中由于 HTTP 是 “无状态协议”,而在实际用户使用浏览器时不单单为了查询信息/资源,而是需要进行一些相关身份验证(登录状态),而又不能在每跳转到一个页面都要重新进行验证~ 于是在我们的服务器就需要储存的一些 信息 和 状态 的记录 而发展的 Cookie 和 Session 机制,对标于我们的一个具体的 Serve
2022-05-26 11:14:58
453
原创 HTTP协议— 基于 TCP 的请求-响应协议 相关交互过程详细介绍
HTTP 叫做:超文本传输协议(Hyper Text TransferProtocol,HTTP)是一个简单的请求-响应协议,它通常运行在 TCP/IP 五层协议栈的应用层。是一种非常广泛的**应用层协议**(客户端和服务器建立连接在应用层)。经典面试题:GET 和 POST 的区别首先先下定论:GET 和 POST 没有本质区别(可以相互替代使用),具体来说,相当于:GET 能使用的场景,也能替换成 POST;POST 使用的场景,也能替换成 GET。语义上的区别:GET 通常是用来取数据的;PO
2022-05-11 11:53:49
4686
4
原创 JavaScript 常用API — WebAPI 详细介绍+实例描述
作为一个想要做后端开发的大三学生,总觉得不了解前端内容比较难受,就通过两篇博客来写写代码,整理整理 ~ 供自己之后复习查阅,也提供给大家有需要的人查看~
2022-05-06 13:31:30
3599
1
原创 (JUC 下典型的类)Java 并发包中线程同步器
文章介绍了并发包中关于线程协作的一些重要类。首先 CountDownLatch 通过计数器提供了更灵活的控制,只要检测到计数器值为 0,就可以往下执行,这相比于 join 必须等待线程执行完毕后主线程才会继续向下运行更灵活。另外,CyclicBarrier 也可以达到 CountDownLatch 的效果,但是后者在计数器值变为 0 后,就不能再被复用,而前者则可以使用 reset 方法重置后复用,前者对同一个算法但是输入参数不同的类似场景比较使用。而 Semaphore 采用了信号量递增的策略,一开始并不
2022-04-22 11:32:13
1062
10
原创 并发编程中常见的锁策略<包含详细介绍CAS机制和ABA问题>
常见锁策略乐观锁与悲观锁 <CAS机制的ABA问题>公平锁与非公平锁独占锁与共享锁<锁一直是围绕线程安全来实现的>可重入锁自旋锁
2022-04-20 09:16:13
2264
11
原创 设计模式之一——单例模式
许多时候整个系统只需要拥有⼀个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在⼀个文件中,这些配置数据由⼀个单例对象统⼀读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种⽅式简化了在复杂环境下的配置管理。
2022-04-19 12:32:32
904
7
原创 关于Java线程池ThreadPoolExecutor相关介绍
线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行异步任务时直接 new 一个线程来运行,而线程的创建和销毁是需要开销的。线程池里面的线程是可以服用的,不需要每次执行异步任务时都重新创建和销毁线程等。每个 ThreadPoolExecutor 也保留了一些基本的统计数据,比如当前线程池完成的任务数目等。
2022-04-14 21:24:06
1424
23
原创 线程休眠和指定唤醒—关于 LockSupport 相关介绍
JDK 中的 rt.jar 包里面的 LockSupport 是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。
2022-04-13 12:12:41
971
原创 Java 多线程—线程通讯【线程通知与等待,wait / notify() / notifyAll()】
线程通讯就是通过实现多线程之间的交互,让线程的每一个独立的“执行流”通过交互相互配合,在能够有效避免线程并发和死锁的的问题下发挥多线程的优势,更高效的处理一些时间片短,任务量大的执行任务。在 Java 当中,实现线程之间进行通讯和配合执行的功能有三个方法:wait() / wait(long timeout):让线程进入等待状态。no
2022-04-11 20:12:48
1387
10
原创 Java 线程死锁及如何避免死锁介绍
死锁是指两个或两个以上的线程在执行过程中,**因争夺资源而造成的互相等待**的现象,在无外力作用的情况下,这些线程会一直相互等待而无法继续运行下去,
2022-04-05 01:09:24
4526
10
原创 Java 中的线程安全性问题——synchronized / Lock
多线程的“共享性”,意味着在程序中的变量可以由多个线程同时访问。而“可变性”则意味着变量的值在其生命周期内可以发生变化。本篇博客记录在 Java 的多线程学习中如何防止多个线程在数据上发生不受控的并发访问~多线程的“共享性”,意味着在程序中的变量可以由多个线程同时访问。而“可变性”则意味着变量的值在其生命周期内可以发生变化。本篇博客记录在 Java 的多线程学习中如何防止多个线程在数据上发生不受控的并发访问~一个对象是否需要是线程安全的,取决于它是否被多个线程访问。这指的是在程序中访问对象的方
2022-03-29 01:22:13
1736
29
原创 Java 多线程的几种状态
Java中的线程的生命周期大体可分为5钟状态新建(NEW): 新创建了一个线程对象。可运行(RUNNABLE): 线程对象创建后,其他线程(比如main线程) 调用了该线程的 start() 方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取 cpu 的使用权。运行中(RUNNING): 可运行状态(runnable) 的线程获得了cpu 时间片,执行程序代码。阻塞(BLOCKED): 阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了 cpu 时间片(timeslice),
2022-03-26 23:01:27
1585
13
原创 Thread 类的基本用法 — 学习笔记
Thread 类的基本用法线程创建线程等待线程休眠yield 让出执行权线程创建线程创建与运行Java中有三种线程创建方式, 分别为实现 Runnable 接口的 run 方法, 继承 Thread 类并重写 run 的方法,和使用带有返回值的 FutureTask 方式。继承 Thread 类方式的实现/** * 继承Thread类创建方式,并重写run方法 */public class ThredDemo { public static void main(Strin
2022-03-25 16:45:52
1358
9
原创 理解—进程和线程之间的联系
进程如果从计算机发展的时间线来讲,在早期的计算机中不含操作系统,他们从头到尾只执行一个程序,并且这个程序能访问计算机中所有的资源。操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都能够在自己单独的进程中运行,操作系统为各个独立的进程分配各种资源。那么从程序层面来讲:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程在早期的分时系统中,每个进程相当于一台虚拟的冯·诺依曼计算机,它拥有存储指令和数据的内存空间,根据机器语言的语义以串行的方式执行指令。那..
2022-03-24 23:31:12
1174
10
原创 MySQL学习记录 【基本操作 → 数据操作 → 高级查询 → 联合查询】 总结
MySQL学习记录 【基本操作 → 数据操作 → 高级查询 → 联合查询】 总结数据库和表的基本操作—11. SQL命令分类2. 数据库操作2.1 MySQL 数据类型2.2 表结构操作3. MySQL增删改查3.1 CRUD二级目录三级目录数据库和表的基本操作—11. SQL命令分类DDL【Data Definition Language】数据定义语言,用来维护存储数据的结构代表指令: create, drop,alter;它的作用是做了一个数据库表的结构的创建和操作数据库结构的语言。数据库表为
2022-03-18 13:14:16
1474
7
原创 Java通过 JDBC 连接数据库操作
Java通过 JDBC 连接数据库操作1. 程序是怎么操作数据库的?2. 什么是JDBCJDBC 工作原理3. JDBC 使用3.1 创建项目并添加 MySQL 驱动3.2 使用代码操作数据库3.2.1 获得数据源3.2.2 获得连接3.2.3 获得执行器3.3.4 查询或操作数据库3.3.5 关闭数据库连接首先,我们想要操作一个数据库服务器,需要有一个数据库客户端,以 MySQL 数据库为引例,最直接的数据库客户端它自己驱动窗口的 ① 命令行工具。一般我们还可以配置出一些 ② 带界面的GUI客户
2022-03-14 23:55:57
8277
4
原创 MySQL事务-知识点总结
MySQL事务-知识点总结1. 什么是事务2. 理解事务 - (用转账操作示例)3. 事务的使用4. 事务的四大特性(ACID)MySQL 事务隔离级别有 4 种(重要)1. 什么是事务事务(Transaction)是将⼀组操作封装成⼀个执⾏单元(封装到⼀起),这⼀个执⾏单元要么⼀起执⾏ 成功,要么⼀起失败,不会出现执⾏“⼀半”的情况。一个最小的执行单元;通常一个事务对应一个完整的业务(例如银行的转账业务,只有转出者金额的减少对应到接收者金额增多这样一个不会从中间断开的一个动态平衡的过程,也就是一个
2022-03-14 13:31:29
2390
6
原创 MySQL索引-知识点总结
MySQL索引-知识点总结1.什么是索引2.索引的使用3.索引底层的数据结构·> MySQL 作为一个数据存储的工具,最基本的就是 MySQL 的基础使用,我们首先要会使用这个工具,会写 SQL 语句,懂得 MySQL 存储数据和 SQL 语句操作数据的机制。·> 那么第二点,我们就要考虑如何让能够把 MySQL 用好,这就是我本文想要整理的关于 MySQL 索引的使用,索引是能够提高 MySQL 性能的,它能够让我们把 MySQL 用得更快,用的更好。索引也是面试中容易考察到的点。·&
2022-03-13 13:21:49
2498
3
原创 七大基于比较的排序[总结]
七大基于比较的排序插入排序直接插入排序希尔排序选择排序选择排序堆排序交换排序冒泡排序快速排序随机化快排双路快排三路快排归并排序插入排序插入排序是一种比较常见的排序方法,它主要包含直接插入排序,希尔排序和折半插入等集中常见的排序方法。直接插入排序首先,我们先来想象一个场景,一个有序的数组,现在需要往这个有序数组中添加一个新的数据,那么此时,需要找到这个数据的合适位置,将大于它的元素后移,将它直接插入就可以了。这是一个动态的,一个一个往有序集合中添加数据的过程,我们可以通过这种方法保持集合中的数据一
2022-02-20 12:19:02
671
原创 二叉树的最近公共祖先_易懂清晰解法
【Leetcode】 236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。这是一棵二叉树,先来分析几个作为最近公共祖先的特点对于和这两个节点来说,他们的最近公共祖先明显是根节点接下来:我么先看一下,如果“3”是“6”和“4”的公共祖先是没问题的,但是很显然它不是最近公共祖
2022-01-01 22:08:39
2675
原创 抽象类和接口的区别—简述
抽象类抽象类是特殊的类,使用abstract定义,它可以包含普通类所能定义的任何种属性和方法,只是在抽象类中,包含一种普通类所没有的抽象方法。eg:比如我们现实生活中有一种方法叫做“说话”,他相当一种抽象类,那么会说话的物种世上千千万,小猫说“喵喵”,小狗说“汪汪”,小青蛙说“呱呱”。所有物种说的内容都不相同,那么在“说话”这个方法中就不能规定一种实例。这是需要每一个子类自己去实现自己的“说话”方法的。· 抽象类是不可以被实例化的。· 抽象类和普通类的区别就在于多了一个抽象方法,不能被实例化。
2021-11-12 09:02:06
3335
3
原创 (Java实现)【LeetCode-707】 设计链表
707.设计链表设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:· get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。· addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入
2021-11-02 11:26:09
242
1
原创 二进制炸弹--拆弹实验
二进制炸弹–拆弹实验这是我们学校计算机系统基础课程的大作业实验,以下是我总结的每一关的通关方法。对于汇编语言的了解还不够深入,解释不好的地方还请大家批评指正。那,我们就出发吧~大作业要求该大作业为闯关实验,共需破解7关。下载以自己学号命名的<学号>.tar压缩文件,在Debian系统里进行解压缩(例:$tar -xvf 987654321.tar)后,通过对可执行文件bomb反汇编,分析汇编代码并获取相关线索,从而破解每一关的输入内容,完成闯关。实验一. 字符串比较phase_0使
2021-11-01 21:28:28
15848
1
原创 汉诺塔-递归解决
汉诺塔-递归解决汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。我们假设现在有一个盘子:A→C我们只需要将A上的盘子移动到C柱子就可以了。移动一次。若有两个盘子,我们的移动方法为:A→B A→C B→C此时我们需要移动三部,先将小的那一个盘
2021-10-01 21:55:12
178
7
原创 memmove,解决内存重叠问题
memmove 解决内存重叠问题首先我们要知道 , mem*系列的函数,叫做内存操作函数,本质是不关心类型,只关心操作的字节数。也就是说:mem系列函数,操作的基本单位是字节。那么我们先来看一下在标准库函数中memcpy和memmove分别是如何实现的:memcpyvoid *memcpy( void *dest, const void *src, size_t count );char* my_memcpy(void* dest, const void* src, size_t count)
2021-09-23 09:14:42
844
1
原创 【C语言】库函数的模拟实现
库函数的模拟实现 模拟实现strcpy模拟实现strcat模拟实现strstr模拟实现strcmp模拟实现strcpy#include<stdio.h>#include<windows.h>#include<assert.h>size_t myStrlen(const char* str){ assert(str); //1 /*int length = 0; while (*str) { str++; length++; } retu
2021-09-21 19:25:19
144
2
原创 【C语言实现】字符串旋转结果(三种方法)
字符串旋转结果写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC方法一实现任意次数的左旋,然后不断进行比较。#include<stdio.h>#include<windows.h>#include<assert.h>void
2021-09-15 19:58:49
1315
原创 C语言求最大公约数三种方法详解
C语言求最大公约数三种方法详解题目要求常用写法(穷举法)辗转相减法辗转相除法main函数整体代码题目要求运行最大公约数的常用算法,并进行程序的调式与测试。常用写法(穷举法)从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数 。int GreatestCommonDivisor1(int _x, int _y){ int temp = _x > _y ? _y : _x;//取出偏小的那个值 for (; temp > 2; temp--){
2021-07-20 18:20:48
9485
6
原创 C语言关于折半查找思想实现猜数字小游戏——对“顺序、选择和循环“的练习使用
C语言关于折半查找思想实现猜数字小游戏——对"顺序、选择和循环"的练习使用实现代码运行实例实现代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#include<windows.h>#pragma warning(disable:4996)void Menu() //菜单实现{ printf("##########
2021-07-19 11:51:29
378
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人