- 博客(18)
- 收藏
- 关注
原创 JAVA SE 自我总结
所以接口不能有与Object方法签名相同的默认方法(Default Method),但可以声明抽象方法,这种情况下实现类必须自己实现这些方法,即使Object中存在相同的方法。2. 新字符串的储存:"hello world" 是动态生成的字符串,储存在堆内存中(不在常量池中,除非调用intern()方法,因为有 new 的存在,所以储存在堆里)在创建的时候要么继承一个类,要么实现一个接口,并且只能继承一个类或者实现一个接口。八种:字节型,短整型,整形,长整型,单精度浮点型,双精度浮点型,字符型,布尔型。
2025-04-12 13:26:50
574
原创 MySql 自我总结
自连接是指将同一个表与自身关联,用于处理表中的层级关系或递归结构。通过为表设置不同的别名 (Alias) 来区分逻辑上的两个"表"。SELECTa.column1, b.column2 -- 选择需要的列FROMtable_name a -- 表的第一个别名JOINtable_name b -- 表的第二个别名ONa.common_column = b.common_column -- 连接条件-- 可选过滤条件。
2025-04-12 13:26:02
682
原创 [JavaEE] Spring IoC&DI
在代码中实现时, 我们只需要将原来自己创建的下级类, 改为传递的方式(也就是注入的方式), 这样就完成了程序的解耦合, 使用 IoC 之后控制权发生反转, 不再是使用方对象创建并控制依赖对象了, 而是把依赖对象注入到当前对象中, 依赖对象的控制权不再由当前类控制了。其中我们可以手动修改启动类的扫描路径, 只需要在启动类里加 @ComponentScan({""}) , 就可以自定义扫描路径, 而我们即使不加 @ComponentScan({""}) , 启动类声明注解也会包含。
2025-01-08 09:28:23
871
1
原创 【JavaEE】Spring Web MVC
是基于 Servlet API构建的原始Web 框架, 从一开始就包含在 Spring 框架中。它的正式名称 “Spring Web MVC” 来自其源模块的名称(Spring-webmvc), 但它常被称为"Spring MVC"。从上述定义我们可以得出一个信息, Spring Web MVC 是一个 Web 框架。MVC 是 Model View Controller 的缩写, 它是软件工程中的一种软件架构设计模式, 它把软件系统分为模型、视图和控制器三个基本部分。
2025-01-08 09:28:19
1004
原创 [JavaEE] HTTP/HTTPS
第一次对服务器发送请求的时候,服务器会返回一个或多个Set-Cookie这样的header,会把cookie通过键值对,设置到电脑硬盘上,因为缓存容易丢,关电脑 掉电都会没,但是并不是谁都可以访问 电脑硬盘,需要获得专门安全机构所颁发的证书才可以。请求中你的 Cookie 字段也包含了一个 gitee-session-n 属性,里面的值和刚才服务器返回的值相同,后续只要访问 gitee 这个网站,就会一直带着这个令牌,知道令牌过期/下次重新登陆,每一次登陆,令牌都是随机生成不一样的。
2024-09-28 21:16:01
1365
9
原创 [JavaEE] IP协议
因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不能直接连接到Internet上,理论上使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址,公网IP必须不同,私网Ip可以重复,不同局域网里的主机IP可以相同。对于这样的虚拟 IP ,不能直接从局域网访问服务器,我们在从内网访问外网的时候,需要公网IP,这个公网IP是唯一的,可以是你路由器提供的,也可以是网关提供。
2024-09-28 21:15:57
713
7
原创 [JavaEE] TCP协议
第一次传的时候花费t1时间,如果长时间没有ack就会发送第二次,花费的时间t2>t1,每次重传的时候时间就会增加,如果重传多次之后都没有ack,这时TCP就会发送一个特殊的数据包。由于TCP首部中,只有一个16位窗口字段,我们所传输的最大上限是固定的,TCP为了解决这个问题,在首部选项中包含了一个窗口扩大因子M,实际窗口大小是 窗口字段的值左移M位;窗口大小:把“发送一次等待一个”改进为“发送一批等待一批”,批量发送数据,不需要等待的数据的量,成为“窗口大小”,批量发送的单位是字节。
2024-09-21 20:12:00
1394
2
原创 [JavaEE] UDP协议
把UDP整个数据报都进行遍历,分别取出每一个字节,往一个 两个字节的变量上进行累加,由于数据可能很多会造成溢出的现象,不过CRC校验和并不在意溢出,会继续相加,知道相加完得到一个结果。UDP会有一个校验和,校验和出错,就会直接丢弃。如果发送端调用一次sendto,发送100个字节,那么接收端也必须调用对应的一次recvfrom,接受100个字节,而不能分开接受。UDP传输最大长度是64K(包含UDP首部),如果我们传输的数据超过64K,接需要在应用层手动的分包,分多次发送,在接收端手动拼接。
2024-09-21 20:11:56
467
4
原创 【JavaEE】初识⽹络原理
⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。我们的⽹络编程主要就是针对应⽤层。网络互连的目的是为了进行网络通信,也就是为了传输数据,更具体一点,是在网络主机中的不同进程之间,基于网络传输数据。分层是为了面向接口变成,定义好使用的规范,使用方不必在意接口的实现逻辑,对于提供方,利用封装的特性,隐藏了实现的细节。这里指的是传统意义上的路由器和交换机,对于现代科技的发展,出现了很多3层或4层的交换机和路由器。
2024-09-15 20:44:10
1001
8
原创 【JavaEE】IO基础知识及代码演示
关于 InputStream 的实现类有很多,对于文件的读写 ,我们只需要关心 FIleInputStream,FileInputStream()里可以是 文件路径 或者 文件,下面是两种输出方式的演示。可以看到我们掉用户 scanner 函数阻塞进程,掉用 deleteOnExit() 之后,文件并没有立即删除,只有当我们结束进程的之后才能删除。可以见到,基础的操作并不难,我们可以通过file.createNewFile()来创建新文件,也可以通过file.delete()来删除文件。
2024-09-15 20:43:57
966
3
原创 [JavaEE] 常见锁策略、自实现定时器
在内核态判定当前锁是否已经被占⽤, 如果该锁没有占⽤,则加锁成功,并切换回⽤⼾态。此处的轻量级锁就是通过CAS来实现,通过CAS检查并更新⼀块内存(⽐如null=>该线程引⽤), 如果更新成功,则认为加锁成功,如果更新失败,则认为锁被占⽤,继续⾃旋式的等待。CAS是直接读写内存的,⽽不是操作寄存器,CAS的读内存,⽐较,写内存操作是⼀条硬件指令,是原⼦的。此时每个append的调⽤都会涉及加锁和解锁,但如果只是在单线程中执⾏这个代码,那么这些加锁解,锁操作是没有必要的,⽩⽩浪费了⼀些资源开销。
2024-08-19 17:24:39
851
7
原创 【JavaEE】多线程中安全的集合类、JUC的常见类的基本用法。
出⼀个新的容器,然后新的容器⾥添加元素,添加完元素之后,再将原容器的引⽤指向新的容器。Callable 描述的是带有返回值的任务, Runnable 描述的是不带返回值的任务。• 锁竞争激烈的时候,使⽤ ReentrantLock,搭配 trylock 更灵活控制加锁的⾏为。CopyOnWrite 容器即写时复制的容器,当我们往⼀个容器添加元素的时候,不直接往当前容器添加,⽽是先将当前容器进⾏Copy,• 优化了扩容⽅式::化整为零, 发现需要扩容的线程,只需要创建⼀个新的数组,同时只搬⼏个元素过去。
2024-08-19 17:23:41
793
6
原创 [JavaEE] 浅谈线程池、自实现阻塞队列
⽣产者和消费者彼此之间不直接通讯,⽽通过阻塞队列来进⾏通讯,所以⽣产者⽣产完数据之后不⽤ 等待消费者处理,直接扔给阻塞队列,消费者不找⽣产者要数据,⽽是直接从阻塞队列⾥取。threadFactory:创建线程的⼯⼚,参与具体的创建线程⼯作.通过不同线程⼯⼚创建出的线程相当于 对⼀些属性进⾏了不同的初始化设置。DiscardOldestPolicy():如果队列上限,放弃最早的任务,来处理新的线程。CachedThreadPool():设置了非常大的线程数,就可以对线程池不停的扩容。
2024-08-16 23:26:53
1045
4
原创 [JavaEE]浅谈单例模式、wait和sleep的区别。
当有多个wait和一个notify的时候,唤醒的线程是随机的,当有多个notify和一个wait的时候,多出来的notify并不会影响进程。懒汉模式不同于饿汉模式,由于不在类加载的时候创建实例,当多线程运行的时候存在几个问题。但是这么做仍然有问题,因为在创建实例的时候,JVM的优化可能让。由于创建操作在加载的时候完成,所以多线程运行的时候不会有线程安全问题。但是这么做,会让多个线程同时进行锁的判断等待,会造成大量的时间浪费。操作容易多个线程同时运行,所以很有可能同时创建了一个实例,而先创建的实力则会消失。
2024-08-16 15:54:54
220
3
原创 【JavaEE】多线程安全问题-死锁等相关问题
涉及多个N个线程M个锁的时候,不构成循环等待是非常重要的,我们需要给每一个锁上一个编号,在所有线程加锁的时候,必须现针对编号小的锁 加锁,后针对编号大的锁加锁。对于可重入锁来说,发现加锁的线程已经被这个锁,锁上了,并不会真正的进行任何的上锁操作,也不会“阻塞操作”,而是直接放行,往下执行代码。<1>线程1拿到A锁之后,不释放A锁的前提下,去拿B锁,线程1拿到A锁的同时,线程2拿到B锁之后,不释放B锁的前提下,去拿A锁,<1>线程抢占原理:线程调度是随机的,线程在调度的时候没有绝对优先的情况。
2024-08-13 21:51:42
972
1
原创 总结多线程阶段性学习(1)
1>当线程A运行时,线程B可以调用A.interrupt()方法,来设置线程A的中断标志为true,然后线程B立即返回,A的中断标志被设置,thread可以通过Thread.currentThread().isInterrupted(),判断指定线程的中断标志被设置,不清除中断标志。run是一个方法,描述线程执行的任务,也可以叫做线程的“入口”’,线程执行后系统自动调用run方法。:一个进程可以拥有多个前台线程和后台线程,后台线程的结束不能让进程结束,只有前台线程一起结束,进程才能结束。
2024-08-13 11:58:00
845
4
原创 Java中的数据类型
java中有八种基本的数据类型,它们分别为:byte(位),short(短整数),int(整数),long(长整数),float(单精度),double(双精度),char(字符),boolean(布尔值)。数据类型分为基本数据类型和引用数据类型,其中基本数据类型包括数值型(byte,short,int等),字符型(char),布尔型(boolean);引用数据类型包括类(class),接口(interface),数组([])。本文章用于复习,写的不好请见谅。
2024-03-07 16:58:29
200
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人