自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 常见的位运算

(n>>x) & 1。

2024-03-25 20:39:41 197 2

原创 Servlet(2)

一个有经验的程序猿和一个新手程序猿相比, 最大的优势往往不是代码写的多好, 而是调试效率有多高. 同一个问题可能新手花了几天都无法解决的, 但是有经验的程序猿可能几分钟就搞定了.使用 Smart Tomcat 部署的时候, 我们发现 Tomcat 的 webapps 内部并没有被拷贝一个 war 包,也没有看到解压缩的内容.初学 Servlet, 遇到的这类问题会非常多. 我们不光要学习 Servlet 代码的基本写法, 也要学习排查错误的思路.其中 Context Path 默认填写的值是项目名称.

2024-02-23 12:27:49 835 9

原创 Servlet(1)

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app。

2024-02-22 11:13:59 711 9

原创 网络原理HTTP/HTTPS(2)

,公证机构就会对这些材料进行审核,审核通过就会给服务器颁发一个证书,公证机构就会针对证书的各个属性计算出一个校验和,并且针对校验和进行加密(这个加密也是非对称加密,公证机构,自己生成一对公钥和私钥),就得到了一个数字签名。这个过程称为证书的校验(核心机制:数字签名,拿着数据的每个字节,带入公式,就能算出一个结果数字,称为校验和,把这个数据和校验和一起发送给对方,对方再按照同样的方式再算一遍校验和,如果对方算出来的校验和和收到的校验和一致,就认为数据在传输过程中没有改变过;).以下为常见的状态码.

2024-02-20 09:51:14 949 12

原创 网络原理HTTP/HTTPS(1)

这个说法不能说是完全错误,确实有一定的局限性的,URL通过query string 来携带数据,query string是只能包含文本的,但是可以对二进制数据进行urlencode,自然就成了文本了,到了服务器自然进行urlencode,就能把数据还原成二进制。通过这个长度来处理粘包问题,HTTP底层也是基于TCP,连续传输多个HTTP数据报,此时接收方这边的接收缓冲区里就会积累多个包的数据,应用程序在读取这些数据的时候就需要明确包之间的边界。

2024-02-06 11:11:48 1333 16

原创 网络原理TCP/IP(5)

• 在⽹卡出⼚时就确定了, 不能修改. mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突;公网上的设备对应的公网IP都必须是唯一的,但是私网上/局域网上的设备使用私网IP只要保证局域网内部的IP不重复即可,不同的局域网之间的Ip允许重复。• 如果在子网中新增⼀台主机,则这台主机的网络号和这个子网的网络号⼀致,但是主机号必须不能和子网中的其他主机重复.• 例如,申请了⼀个B类地址,理论上⼀个⼦⽹内能允许6万5千多个主机.A类地址的⼦⽹内的主机数更多.

2024-02-05 09:50:03 1035 10

原创 网络原理TCP/IP(4)

• 读100个字节数据时,也完全不需要考虑写的时候是怎么写的,既可以⼀次read100个字节,也可以⼀次read⼀个字节,重复100次;• 另⼀⽅⾯,TCP的⼀个连接,既有发送缓冲区,也有接收缓冲区,那么对于这⼀个连接,既可以读数据,也可以写数据.这个概念叫做全双⼯。• 对于UDP,如果还没有上层交付数据,UDP的报⽂⻓度仍然在.同时,UDP是⼀个⼀个把数据交付给应⽤层.就有很明确的数据边界.• 站在应⽤层的站在应⽤层的⻆度,使⽤UDP的时候,要么收到完整的UDP报⽂,要么不收.不会出现"半个"的情况。

2024-02-04 10:48:02 1344 6

原创 网络原理TCP/IP(3)

接收端处理数据的速度是有限的.如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继⽽引起丢包重传等等⼀系列连锁反应.因此TCP⽀持根据接收端的处理能⼒,来决定发送端的发送速度.这个机制就叫做流量控制(FlowControl);在延迟应答的基础上,我们发现,很多情况下,客⼾端服务器在应⽤层也是"⼀发⼀收"的.意味着客⼾端给服务器说了"How are you",服务器也会给客⼾端回⼀个"Fine,thank you";如果⽴刻应答,返回的窗⼝就是500K;

2024-02-04 10:04:04 885 1

原创 网络原理TCP/IP(2)

超时重传是确认应答的补充,如果一切顺利,通过应答报文就可以告诉发送方当前数据是不是成功收到,但是网络上可能存在丢包的情况,如果数据包丢了没有到达对方,对方自然也就没有ack报文,这种情况下就需要超时重传,当认为丢包之后,就会把刚才的数据包再传输一次,等待的过程有一个时间的阈值,就是“超时”。此时的TIME_WAIT等待也不是无休止的等待,最多等2MSL(MSL是一个系统内核的配置项,表示客户端到服务器之间,消耗的最长时间,这个时间一般是一个非常大的时间,常见的设置值是1min)下⼀次你从哪⾥开始发.

2024-02-03 09:04:44 1231 8

原创 网络原理TCP/IP(1)

在网络通信中,协议非常重要协议进行了分层应用层就是对应着应用程序,是程序员打交道最多的这一层,调用系统提供的网络api写出来的代码都是属于应用层的应用层有很多现成的协议,但是更多的还是程序员需要根据实际场景自定义协议自定义协议,约定好两方面内容1.服务器和客户端之间要交互哪些信息2.数据的具体格式为了让程序员更方便的去约定这里的协议格式,业界也给出了几个比较好用的方案,1.(可扩展标记语言)

2024-02-02 09:02:39 2388

原创 网络编程1

⽹络编程,指⽹络上的主机,通过不同的进程,以编程的⽅式实现⽹络通信(或称为⽹络数据传输)。当然,我们只要满⾜进程不同就⾏;所以即便是同⼀个主机,只要是不同进程,基于⽹络来传输数据,也属于⽹络编程。特殊的,对于开发来说,在条件有限的情况下,⼀般也都是在⼀个主机中运⾏多个进程来完成⽹络编程。但是,我们⼀定要明确,我们的⽬的是提供⽹络上不同主机,基于⽹络来传输数据资源:• 进程A:编程来获取⽹络资源• 进程B:编程来提供⽹络资源。

2024-01-28 11:49:11 1017 2

原创 初识网络原理

⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵从的⼀组约定、规则。有了IP地址和端⼝号,可以定位到⽹络中唯⼀的⼀个进程,但还存在⼀个问题,⽹络通信是基于⼆进制0/1数据来传输,如何告诉对⽅发送的数据是什么样的呢?⽹络互连的⽬的是进⾏⽹络通信,也即是⽹络数据传输,更具体⼀点,是⽹络主机中的不同进程间,基于⽹络传输数据。

2024-01-21 09:08:12 930 3

原创 文件操作和IO

我们先来看看 File 类中的常⻅属性、构造⽅法和⽅法方法说明InputStream只是⼀个抽象类,要使⽤还需要具体的实现类。关于InputStream的实现类有很多,基本可以认为不同的输⼊设备都可以对应⼀个InputStream类,我们现在只关⼼从⽂件中读取,所以使⽤构造方法说明OutputStream同样只是⼀个抽象类,要使⽤还需要具体的实现类。我们现在还是只关⼼写⼊⽂件中,所以使⽤FileOutputStream。

2024-01-19 08:58:53 799

原创 多线程——Callable,ReentrantLock,Semaphore,CountDownLatch

• 创建线程, 线程的构造⽅法传⼊ FutureTask . 此时新线程就会执⾏ FutureTask 内部的 Callable 的call ⽅法, 完成计算. 计算结果就放到了FutureTask 对象中.Callable 通常需要搭配 FutureTask 来使⽤. FutureTask ⽤来保存 Callable 的返回结果. 因为Callable 往往是在另⼀个线程中执⾏的, 啥时候执⾏完并不确定.当有⻋开出来的时候, 就相当于释放⼀个可⽤资源, 可⽤⻋位就 +1 (这个称为信号量的 V 操作)

2024-01-17 09:04:54 916

原创 多线程——定时器

定时器在日常开发中常用到的组件工具,类似于“闹钟”设定一个时间,到了时间定时器就会自动去执行某个逻辑。

2024-01-16 09:07:17 400

原创 多线程——CAS

CAS的全称:Compare and swap,字面意思就是:“比较并交换”,一个CAS涉及到以下操作:假设内存中的原数据V,旧的预期值A,需要修改的新值B1.比较A与V是否相等(比较)2.如果相等,将B写入V(交换)3.返回操作是否成功CAS伪代码:下面写的不是原子的,真正的CAS是一个原子的硬件指令完成的,这个伪代码只是用来辅助理解CAS的工作流程。

2024-01-16 09:05:49 894

原创 多线程——阻塞队列

相比于一般的队列,有两个特点1.线程安全2.带有阻塞功能1)队伍为空时,出队列就会出现阻塞,阻塞到其他线程入队列为止2)队伍为满时,入队列就会出现阻塞,阻塞到其他线程出队列为止常用于生产者消费者模型作用:1.解耦合2.削峰填谷。

2024-01-15 09:00:36 554

原创 线程安全2

第一次加锁的时候计数器+1(初始情况为0,+1后变成了1,说明当前这个对象被该线程加锁一次)同时记录线程是谁,第二次加锁的时候,发现加锁线程和持有线程是一个线程,第二次应该能够加锁成功,判断当前加锁进程是否持有锁的线程,如果不是同一个线程,阻塞如果是同一个线程,就只是++计数器,即可没有其他操作,此处的计时器(源码是在JVM中,c++代码实现出来的)是关键。当前由于是同一个线程,此时的锁对象,就知道了第二次加锁的线程,就是持有锁的线程,第二次操作,就可以直接放行通过,不会出现阻塞。2.两个线程,两把锁。

2024-01-15 09:00:19 521

原创 小区人员管理系统【含数据库源码】

随着社会的快速发展,计算机的影响是全面且深入的。人们的生活水平不断提高,日常生活中业主对小区综合业务系统方面的要求也在不断提高,小区综合业务人数更是不断增加,使得小区综合业务系统的开发成为必需而且紧迫的事情。小区综合业务系统主要是借助计算机,通过对小区综合业务系统所需的信息管理,增加业主选择,同时也方便对广大业主信息的及时查询、修改以及对业主信息的及时了解。小区综合业务系统对业主带来了更多的便利, 该系统通过和数据库管理系统软件协作来满足业主的需求。

2023-12-27 09:21:07 754 1

原创 多线程--单例模式【懒汉模式和饿汉模式】

上述代码,由于t1线程执行完1 3之后,调用走,此时instance指向的是一个非null的,但是未初始化的对象,此时t2线程判定instance==null不成立,就会直接return 如果t2继续使用instance里面的属性或者方法,就会出现问题(此时这里面的属性都是未初始化的“全0”值),就可能会引起代码的逻辑出现问题。实例是在类加载的时候就创建了,创建时机非常早,相当于程序一启动,实例就创建了,就使用“饿汉”来形容创建实例非常早。正常情况下,上述代码是按照1 2 3的顺序执行的。

2023-12-18 09:20:54 903 1

原创 线程安全3--wait和notify

第一个人,先进去,发现ATM没钱,然后出来了,但是和其他人来竞争这个ATM,参与到了锁竞争中,此时完全有可能第一个人再次拿到这个锁,如果反复如此,就会导致第一个人反复获取到锁,但又无法完成实质性的逻辑,导致“线程饿死”。这种情况就是严重的bug,当第一个人发现自己要执行的逻辑,前提条件不具备,在这种情况下,应该主动放弃对锁的竞争,一直到条件具备,此时再解除阻塞,参与锁竞争,这个时候就要用到wait和notify。5.t2打印notify后,释放锁,t2执行完毕,t1获取到锁,打印wait后。

2023-12-10 10:52:53 706

原创 Map和Set【OJ练习题】

新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。链表的深拷贝,就是要开辟新的内存空间来存放链表,用Map使链表中的每一个节点一一对应,形成键值对,然后使用Map方法使新生成的节点连接起来;给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。数字:2 出现的次数:2。

2023-10-26 23:30:36 165 1

原创 哈希表Map和Set【万字文】

其中:i = 1,2,3…假设要存储某家公司员工登记表,如果用手机号作为关键字,那么极有可能前7位都是 相同的,那么我们可以选择后面的四位作为散列地址,如果这样的抽取工作还容易出现 冲突,还可以对抽取出来的数字进行反转(如1234改成4321)、右环位移(如1234改成4123)、左环移位、前两数与后两数叠加(如1234改成12+34=46)等方法。首先,我们需要明确一点,由于我们哈希表底层数组的容量往往是小于实际要存储的关键字的数量的,这就导致一个问题,冲突的发生是必然的,但我们能做的应该是尽量的。

2023-10-26 17:08:24 199 1

原创 排序【七大排序】

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。直接插入排序是一种简

2023-10-17 23:06:32 1087 2

原创 【数据结构】LinkedList与链表

上节课已经熟悉了ArrayList的使用,并且进行了简单模拟实现。因此:java集合中又引入了LinkedList,即链表结构。找到最后一个元素cur,cur的next指向要插入元素的地址。使每个node的next域指向下一个节点的地址,连接成链表。对 node.next = this.head;进行解释,node的next域指向下一个节点的地址。遍历一遍链表寻找是否有key元素。由于其底层是一段连续空间,当。head指向第一个节点的地址。head继续为头节点。

2023-09-17 23:32:41 405 12

原创 自定义实现简易版ArrayList

super(msg);

2023-09-17 19:34:13 263 3

原创 【数据结构】ArrayList和顺序表

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下【说明】ArrayList是以泛型方式实现的,使用时必须要先实例化ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。

2023-09-16 16:34:19 282 4

原创 【数据结构】包装类&简单认识泛型

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。----- 来源《Java编程思想》对泛型的介绍。就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }

2023-09-11 23:51:00 453 14

原创 【数据结构前置知识】初识集合框架和时间,空间复杂度

Java 集合框架,又被称为容器container,是定义在java.util包下的一组接口interfaces和其实现类classes。其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD。例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射关系)等等。类和接口总览数据结构(Data Structure)是。

2023-09-11 15:09:17 319 1

原创 认识异常【超详细】

Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构.例如, 我们实现一个用户登陆功能if (!if (!System.out.println("登陆成功");此时我们在处理用户名密码错误的时候可能就需要抛出两种异常. 我们可以基于已有的异常类进行扩展(继承), 创建和我们业务相关的异常类.自定义异常类,然后继承自Exception 或者 RunTimeException。

2023-09-09 17:18:11 148 12

原创 【Java】BF算法(串模式匹配算法)

BF算法,即,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个与模式串T的第一个字符串进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果,。

2023-08-16 10:51:17 804 22

原创 Java【数据结构】二分查找

right=arr.length,作为一个边界存在,left可能为我们的查找目标,但是right一定不是我们要找到的目标。2.为什么mid = (left+right)>>>1,而不是(left+right)/2呢?如果数组中不存在目标值 target,返回 [-1, -1]。说明:查找元素为重复元素的话,会查找到最右边的重复元素。说明:查找元素为重复元素的话,会查找到最左边的重复元素。你可以假设 nums 中的所有元素是不重复的。说明:返回<=target的最右边的索引。找到则返回最靠右索引。

2023-08-14 23:02:22 1446 15

原创 Java StringBuffer和StringBuilder类

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。与String不同的是,StringBuffer和StringBuilder是对字符串本身进行修改,并且不产生新的对象,而String是产生新的字符串进行修改。

2023-08-12 21:57:53 373 20

原创 Java String类【超详细】

前言:在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。在开发和校招笔试中,字符串也是常客,而且在面试中也频繁被问到,比如:String、StringBuff和StringBulider之间的区别等。

2023-08-09 22:54:52 320 15

原创 图书管理借阅系统【Java简易版】Java三大特征封装,继承,多态的综合运用

用前面学到的数组,类和对象,封装,继承,多态,抽象类,接口等做一个图书管理借阅系统。

2023-08-08 22:49:35 292 17

原创 Java内部类

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么这个内部的完整结构最好使用内部类。在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。内部类也是封装的一种体现。} } // OutClass是外部类 // InnerClass是内部类【注意事项】定义在class 类名{}花括号外部的,即使是在一个文件里,都不能称为内部类} // A 和 B是两个独立的类,彼此之前没有关系。

2023-08-07 15:15:07 254 15

原创 Java抽象类和接口【超详细】

在打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由 Shape的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个。如之前写的 Animal 例子. 此处的 Animal 中包含一个 name 这样的属性, 这个属性在任何子类中都是存在的. 因此此处的 Animal 只能作为一个抽象类, 而不应该成为一个接口。在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。

2023-08-06 22:17:54 919 12

原创 Java三大特征之多态

在这个过程当中,我们不应该在原来老的类上进行修改,因为原来的类,可能还在有用户使用,正确做法是:新建一个新手机的类,对来电显示这个方法重写就好了,这样就达到了我们当今的需求了。当类的调用者在编写 eat 这个方法的时候, 参数类型为 Animal (父类), 此时在该方法内部并不知道, 也不关注当前的a 引用指向的是哪个类型(哪个子类)的实例. 此时 a这个引用调用 eat方法可能会有多种不同的表现(和 a 引用的实例相关), 这种行为就称为 多态.重写的好处在于子类可以根据需要,定义特定于自己的行为。

2023-08-02 22:22:35 687 20

原创 Java三大特征之继承【超详细】

在子类构造方法中,并没有写任何关于基类构造的代码,但是在构造子类对象时,先执行基类的构造方法,然后执行子类的构造方法,因为:子类对象中成员是有两部分组成的,基类继承下来的以及子类新增加的部分。直接访问是无法做到的,Java提供了。总结:成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。,这样产生新的类,称派生类。1.通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。

2023-08-01 21:55:10 867 12

原创 Java类和对象【超详细】干货满满

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要开发人员告诉给计算机什么是洗衣机。

2023-07-31 21:55:06 4653 15

空空如也

空空如也

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

TA关注的人

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