- 博客(42)
- 收藏
- 关注
原创 图解TCP协议:啥是tcp,tcp协议格式段,十大常见的tcp核心机制
TCP 全称为"传输控制协议就是传输层的一个协议,用来运输数据的,要对数据的传输进⾏⼀个详细的控制源端口,目的端口:表⽰数据是从哪个进程来,到哪个进程去;32位序号/32位确认号:由于tcp是面向字节流的,所以是按字节为编号进行递增的,所以只要知道第一个编号,就之后后面的数据了。确认号是看看接收方收到了吗。比如发送方发1-1000,那么序列号就是1,如果收到了,确认号就发1000,就说明1000收到了,那么之前的就都收到了。(32位是2^32也就是42亿9千万,也就是4GB。
2024-11-16 22:32:00
1861
原创 UDP和TCP的区别、网络编程(UDP回显服务器、TCP回显服务器)
指⽹络上的主机,通过不同的进程,以编程的⽅式实现⽹络通信(或称为⽹络数据传输)。当然,我们只要满⾜进程不同就⾏;所以即便是同⼀个主机,只要是不同进程,基于⽹络来传输数 据,也属于⽹络编程。(由于设备有限,这里都用一个主机来示范)如上图:服务器就是个进程,客户端也是个进程。服务器为客户端提供数据。
2024-10-12 14:55:09
1206
原创 文件路径、文件系统操作、字节流字符流、文件内容操作、自己实现文件查找 删除 复制、IO报错:拒绝访问
文件就是在计算机的硬盘中躺着的,这些文件都是一个个单独的个体。⽂件除了有数据内容之外,还有⼀部分信息,例如⽂件名、⽂件类型、⽂件⼤⼩等并不作为⽂件的数 据⽽存在,我们把这部分信息可以视为⽂件的元信息。我们文件的存储 是依靠树型结构来存储的目录:相当于文件夹,可能很多个文件放一起的文件:一个单独的个体构造方法签名说明利⽤ File 构造⽂件输⼊流利⽤⽂件路径构造⽂件输⼊流break;i<n;i++){这里的buffer是输出型参数,就是被当参数传进去,然后被填满着出来。
2024-10-05 17:32:10
947
原创 局域网广域网,IP地址和端口号,TCP/IP 4层协议,协议的封装和分用
在古老的年代,如果我们要实现两台机器进行数据传输,A员工就得去B员工的办公电脑传数据(B休息,等A传完),这样就很浪费时间所以能不能不去B的工位的同时,还能传数据。这时候网络通信就出来了。随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完成业务,就有了⽹络互连。⽹络互连将多台计算机连接在⼀起,完成数据共享。数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。根据⽹络互连的规模不同,可以划分为局域⽹和⼴域⽹。目录前言。
2024-09-26 12:55:53
1724
原创 乐vs悲观锁,重vs轻量级锁,公vs非公平锁,不vs可重入锁,等等锁策略
比如:我们班有“带眼镜”的同学,这里“带眼镜”并不是指一个人,而是指一类人。并且这里的锁,并不局限于Java,而是只要关于有锁的话题,就会有下面的讨论。
2024-09-18 23:57:41
618
1
原创 线程池是啥有啥用,怎么用,如何自己实现一个
假设我是一个(好看+有才华) 的妹子,那么我就会有很多追求者,这些也叫备胎们,我们若把他们放到一个地方,那就叫“备胎池”。同理,线程就叫“线程池”。
2024-09-16 23:54:43
1288
原创 堵塞队列是啥咋实现,生产者消费者模型是咋样的
擀饺⼦⽪的⼈就是 "⽣产者", 包饺⼦的⼈就是 "消费者". 擀饺⼦⽪的⼈不关⼼包饺⼦的⼈是谁(能包就⾏, ⽆论是⼿⼯包, 借助⼯具, 还是机器包), 包饺⼦的⼈也不关⼼擀饺⼦⽪的⼈是谁(有饺⼦⽪就⾏, ⽆论是⽤擀⾯杖擀的, 还是拿罐头瓶擀, 还是直接从超市买的).如果直接处理这些⽀付请求,服务器可能扛不住(每个⽀付请求的处理都需要⽐较复杂的流程)。在如果上一个部门的工人生产的很快,传送带都放慢了不够放了,那么这个部门的人就可以等传送带的被下一个部门的工人拿完才就可以继续放。这个队列又带有堵塞的功能。
2024-09-16 23:54:25
669
原创 线程安全是什么问题?如何引起?死锁是啥?如何解决?
是多个线程并发执行,而产生的结果和我们预期的不相同,这种bug是由多线程引起的,所以我们叫线程安全问题,也就是线程不安全。i<50000;});i<50000;});t1.start();t2.start();t1.join();t2.join();我们预期是t1线程50000次,t2线程50000次,加起来一共100000次。这个是我们预期的结果。但是真实的情况如下:是79506次,而且每一次的结果都不一样,这样。
2024-08-24 21:58:43
919
原创 线程是什么?和进程区别是什么?怎么用?
进程,也叫任务。就是正常执行的程序。一个程序有两种状态:一是没有被执行,在硬盘上躺着的软件;二是按了exe程序执行的,这时会进入内存,被CPU读取,这就是进程。为什么需要线程,不直接用进程?答:咱们之前的代码用的都是一个核心,即使我们再怎么优化,最后也会不够用,而且其他核心都看戏,所以我们需要让多个核心也就是“并发编程”
2024-08-24 21:58:30
4008
原创 五分钟带你了解“简化版”的CPU(核心参数,寄存器,执行,进程调度)
就是让CPU的集成程度高(包含更多的运算单元,才能算的快,所以每个运算单元就要很小),但是后来CPU运算单元已经很小了,已经达到4nm,7nm什么什么的,太小就要量子力学来解决了,这条路也就走不通了。假设C感觉到自己被冷漠了,就不开心了,也不怎么哄我了,这时候我们需要给C一点甜头,让它继续舔我(比如给它我不要的发圈,或者主动约他,主动找他聊两句话等等....),等他舔我了之后,然后继续冷落他。但是寄存器的内存太小了,只有几kb,如果要读取内存的数据,要反复的读取,那就比较麻烦且耗时间。
2024-07-29 00:11:29
957
原创 “手撕”全网最细的JDBC教程(安装导入使用)
JDBC由Java提供给数据库的一组通用的API。在平常的业务中,是比较少使用像cmd命令行来操作数据库的,更多的是操作代码(Python,Java,C++,Go等等),但是还是会使用到sql语句。通过代码操作数据库的时候,数据库要提供一份API,供其他程序来调用。什么是API?答: API全名是Application Programming Interface(应用程序编程接口)。我们在写代码的时候并不是从0开始写的,可以。
2024-07-29 00:10:56
1380
原创 “手撕”MySQL的事务
事务就是把多个sql语句包装成一个”整体“,执行的话就一起执行!比如说:A账户转给B账户500块。这时候就需要2个sql语句,我们包装成一个整体,一起执行。问题:之间分为2条语句依次进行不就好了吗?答:不合适。假设我这时候突然”程序卡死“,”电脑掉电“.....等等,A都-500执行完了,已经扣钱了,但是我B却没有收到钱,这就是一个巨大的事故!!!要么一起执行,要么都不执行!一起执行很好理解,就是多条sql语句一起执行,但是”都不执行“却有些不一样。这里的”都不执行“ 指的是。
2024-07-29 00:09:40
644
原创 “手撕”MySQL的索引
索引(index),在其他语言中,我们管索引叫下标,但是在MySQL中有点不一样,我们可以理解为目录!这些索引保存着我们的数据地址。就像我们新华字典一样,如果我们想找一个字,我们可以通过拼音目录,部首目录等等,非常的快!1)索引是啥,解决啥问题索引相当于书的目录,能够提高查询的速度2)索引付出了什么代价a)需要更多的存储空间b)肯会影响增删改的效率(不一定会影响)整体来说,索引的利大于弊3)如何使用sql操作索引,是否有注意事项a)show index from 表名;
2024-07-29 00:09:24
1087
原创 五分钟“手撕“(优先级队列)堆和OJ习题
概念:前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,比如:在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话;初中那会班主任排座位时可能会让成绩好的同学先挑座位。在这种情况下,数据结构应该提供两个最基本的操作,一个是返回最高优先级对象一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue)。大根堆、小根堆。
2024-06-16 22:13:16
1155
29
原创 五分钟“手撕”二叉树
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。那些算树?哪些不算树?树形结构中,子树之间不能有交集,否则就不是树形结构子树是不相交的除了根节点外,其他节点有且仅有一个父节点一颗有N个节点的树,它一共有N-1条边三、树的重要概念这些概念就跟我们家庭一样,孩子为子树,父亲为父树,兄弟为同辈的树。。。结点的度:度就是有多少个孩子;如上图:A的度为3树的度:最大的度;
2024-06-11 23:19:51
928
10
原创 三分钟“手撕”队列与习题
简单来讲:先进先出的队伍!假设第一个入队(push)的是1,第二个2 第三个3,那么先进先出的队伍,出来(pop)的是1,然后pop是2,pop是3。
2024-06-04 00:45:23
966
5
原创 五分钟“手撕”栈和习题
简单来说,先进后出的队伍!堆叠这些元素的底部,我们叫栈底,顶部我们叫栈顶。元素进入栈,叫入栈。元素离开栈,叫出栈。
2024-06-01 22:04:44
1037
15
原创 “手撕”链表的九道OJ习题
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回 NULL。删除链表中等于给定值 val 的所有节点。输入两个链表,找出它们的第一个公共结点。给定一个链表,判断链表中是否有环。
2024-06-01 20:41:09
1240
11
原创 五分钟“手撕”链表
简单来说,像链子一样的数据结构。像火车一节一节车厢一样,每个元素是独立的个体(内部类)。并且他们在空间里是分散的。为什么分散的还可以找到下一个呢?答:一个节点里面装着两种东西,一个是值,一个的下一个的地址,这样根据下一个的地址就可以找到下一个了。
2024-05-29 23:20:36
867
12
原创 五分钟”手撕“异常
顾名思义:就是不正常。当一个正在运作的机器突然卡了,或者不动了,我们称为异常;当一个健康的人突然生病了,身体开始不舒服,我们称为异常。所以:在Java中,将程序执行过程中发生的不正常行为称为异常。Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我 们实际情况的异常结构。具体方法如下:1. 自定义异常类,然后继承自Exception 或者 RunTimeException2. 实现一个带有String类型参数的构造方法,参数含义:出现异常的原因。
2024-05-26 23:16:46
933
20
原创 “手撕”String类+练习题
题目解释:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
2024-05-23 18:53:27
998
15
原创 八分钟“手撕”包装类与泛型
泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。class 泛型类名称<类型形参列表> {// 这里可以使用类型参数class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {// 这里可以使用类型参数// 可以只使用部分类型参数//<T>代表的这是一个泛型类(有<>都是泛型)//1//除了上面这一条代码,把下列所有Object替换成T。
2024-05-16 13:48:13
1089
20
原创 五分钟“手撕”时间复杂度与空间复杂度
算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
2024-05-15 00:37:45
683
14
原创 十分钟“手撕”内部类+static在内部类的使用
内部类 就是写在外部类内的类。比如:下列代码中,OutClass是外部类,InnerClass是内部类。// 成员位置定义:未被static修饰 --->实例内部类// 成员位置定义:被static修饰 ---> 静态内部类// 方法中也可以定义内部类 ---> 局部内部类:几乎不用1. 成员内部类(普通内部类:未被static修饰的成员内部类 和 静态内部类:被static修饰的成员内部类)2. 局部内部类(不谈修饰符)、匿名内部类。
2024-05-11 23:41:02
598
20
原创 两分钟“手撕”Object类
Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收。Object类是所有类的父类。//执行结果既然可以向上转型,那就说明Person和Student继承于Object这个类。
2024-05-02 12:54:05
495
17
原创 三分钟“手撕”Java中的接口(下)
Comparable接口的出现使得比较可以更加灵活,并且不需要在原来的Student类进行修改,而是直接创造一个AgeComparable或NameComparable的类,需要的时候直接new对象就行了!通过studen2这个引用修改了m的值后,studen1这个引用访问m的时候,值也发生了改变。小提示:下列代码这个只有一份,跟拷贝不一样,student2没有生成空间放值,是直接指向student1。如上代码,我们可以看到,通过clone,我们只是拷贝了Student对象。那有没有比较灵活一点的比较呢?
2024-05-01 22:04:03
50
15
原创 五分钟“手撕”Java中的接口(上)
接口其实算一种特殊的抽象类,比抽象类还要抽象的东西。在日常生活中,随处可见都有接口:笔记本上的USB口,电源接口等....耳机接口,只要你是符合耳机规范(市面上的耳机一样规格的)就能接入;电源接口,只要你符合电源接口的规范,就能接入。接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。
2024-04-30 20:49:44
736
11
原创 七分钟“手撕”三大特性<多态>
书写方法时返回值和形参都不能改变。即外壳不变,核心重写!简单来讲:增加多点业务。例如:若干年前的手机,只能打电话,发短信,来电显示只能显示号码,而今天的手机在来电显示的时候,不仅仅可以显示号码,还可以显示头像,地区等。在这个过程当中,我们不应该在原来老的类上进行修改(因为可能还有老用户在使用)正确做法是:新建一个新手机的类,对来电显示这个方法重写就好了,这样就达到了我们当今的需求了。实际就是创建一个子类对象,将其当成父类对象来使用。
2024-04-24 16:00:54
885
10
原创 五分钟手撕“三大特性”<继承>(下)
目录一、protected 关键字二、继承方式三、final 关键字四、子类的构造方法五、this和super (一)相同点:(二)不同点:六、代码块的执行先后 在类与对象中提到过,为了实现封装特性,Java中引入了访问限定符,主要限定:类或者类中成员能否在类外或者其他包中被访问。protected它是一种比较温和的权限,它既不会像private一样私密,也不会像public一样开放,它是介于中间的。在同一个包中可以使用,在不同包也能用(不过是子类)。 注意:父类中private成员变量虽然在子类中
2024-04-21 15:08:20
886
13
原创 三分钟“手撕“三大特性之一的<继承>(上)
把公共的东西抽取出来,让对象去获得公共的东西(名字年龄吃饭等等)就叫做继承。对于抽取出来的东西做成一个类,我们叫做父类,对于自己额外有的东西(比如:狗狗的汪汪汪,猫猫的喵喵喵)做成一个类,我们叫做子类。有什么好处呢?就是可以实现代码的复用,提高工作效率。
2024-04-20 21:14:06
751
10
原创 “手撕“数组一些简单的习题
Java 中提供了 java.util.Arrays 包, 其中包含了一些操作数组的常用方法.Arrays.toString其实是一个方法,它可以直接帮我打印数组里面的值转成字符串。交换两个位置的元素. 然后让前一个下标自增, 后一个下标自减, 循环继续即可。给定一个数组, 再给定一个元素, 找出该元素在数组中的位置.思路:设定两个下标, 分别指向第一个元素和最后一个元素,5,4,3,2,1就是降序,也为有序数组。1,2,3,4,5就是升序,为有序数组。给定一个数组, 将里面的元素逆序排列。
2024-04-16 16:50:33
757
13
原创 三分钟带你“手撕”数组
那么我们会发现有很多重复的地方,而且很麻烦,每一个都要书写一遍,还不好管理。那有没有一种东西,可以把它们都给装到一个东西里面去,更好的书写并管理它们呢?答:有,那就是数组!数组就是把相同类型的变量储存在一个地方里面。它可以大大减少书写的次数,还方便管理。它就像一个车库,都有着自己的代号(也就是下标)可以方便我们管理。在Java中,如果有六个相同类型的元素,就相当于上图的六个车位。可以看出:1.数组中存放的元素其类型相同2. 数组的空间是连在一起的3. 每个空间有自己的编号,
2024-04-15 12:47:32
782
14
原创 三分钟“手撕”三大特性中的<封装>
面向对象有三大特性:封装、继承、多态。那什么是封装呢?简单来说,就是套个壳子隐藏里面的细节。但是请注意,这三大特性是面向对象的,不能说是Java的三大特性。比如:一个电脑来说,电脑内部是很复杂的,但是它提供了就是开关机、通过键盘输入,显示器,USB插孔等,让用户来和计算机进行交互,完成日常事务。但实际上,电脑真正工作的却是CPU、显卡、内存等一些硬件元件。导入包就是软件给你提供了一些现成可以使用的类,一起形成了一个包,就叫做导入包。
2024-04-13 11:44:21
992
10
原创 五分钟“手撕”This引用、构造方法
int a;是创建一个变量,而int a=0;就是初始化变量,在创建它的时候顺便给它赋了个值,着就是初始化。int a;// Error:(26, 28) java: 可能尚未初始化变量a看上面这个代码,如果不初始化,在后续去输出它肯定会报错,为什么?因为它只管分配空间不包括给值,里面本来就没值,你还去打印它,所以会报错!构造方法是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。简单来讲:它是给对象的变量初始化的方法。
2024-04-11 19:41:40
909
7
原创 三分钟带你“手撕”Java中的类与对象
Java是一门面向对象的编程,那什么是面向对象呢?比如:你要把大象放进冰箱,你只需要三个对象,人和大象和冰箱。你只需要打开冰箱门,往里面放大象就行了,之后关上冰箱门。你不需要知道怎么放,横着放还是竖着放,也不需要考虑要怎么把他塞进去。像这种不考虑较少过程,多考虑对象的,就叫面向对象。如果要考虑过程,就是面向过程。面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。类是用来描述一个实体(对象)的,主要是描述它是怎么样的,能干什么?比如:洗衣机。它是什么牌子的。
2024-04-11 13:26:41
542
11
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人