- 博客(151)
- 收藏
- 关注
原创 关于Spring的bean的相关注解以及其简单使用方法
我们根据上面三个步骤,已经可以使用五大注解的方式来简单的的获取和调用对象了,现在我们需要对对象的内容进行注入,并获取注入了属性之后的对象。我们都只需要在类前面加上响应的注解,然后在主函数利用ApplicationContext获取注解,并调用对应方法,就可以打印。构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。第三步:创建com.java.com这个包,及其相应的内容,列如我创建一个学生类。简单来说,他们就是作为一个标识,每一个都表示不同的意思。但我们只是使用的话,他们的效果是近乎一样的。
2023-07-28 11:40:53
561
原创 关于java垃圾回收的小结
我们每次创建对象都需要在栈上开辟空间,堆上使用内存,如果我们只是开辟了这个空间,而不去释放他,那么再大的内存和空间也会有满的一天,所以我们在Java中引入了GC(垃圾回收机制)这里称为起点的变量(GCRoot),可以为栈内的局部变量,常量池中的对象,方法区中的静态引用类型的成员。可达性分析:以代码中的一些变量为起点,看哪些对象能被访问到,标记为可达,剩下的不可达的也就是垃圾了。如果到了一定的年龄,该进程任然在运行,不是垃圾,那么就会被放到扫描频率低一点的幸存区。然后GC就认为2是垃圾,就会去回收他。
2023-07-14 10:03:02
738
原创 类加载的过程(简单介绍)
(1)开发人员可以通过继承 java.lang.ClassLoader类的方式实现自己的类加载器,以满足一些特殊的需求。
2023-07-14 09:45:35
689
原创 Cookie 和 Session 的工作流程
当用户登陆的时候, 服务器在Session中新增一个新记录, 并把 sessionId / token 通过Set-Cookie字段返回给客户端客户端后续再给服务器发送请求的时候,需要在请求中带上 sessionId/ token(例如通过HTTP请求中的 Cookie 字段带上).一家医院在一天是同时接待上万人,为了能够保证能对每个病人对症下药,每当你使用你的就诊卡进行诊疗,那么医院的数据库就会查找出你对应的病症,让医生给你开药。4.Cookie存的是键值对结构的字符串,此处的键值对都是程序员自定义的。
2023-07-07 13:32:01
241
原创 servlet和form和session表单实现最简单的登录跳转功能(详解,文末付源码)
servlet和form和session表单实现最简单的登录跳转功能
2023-07-07 13:14:38
972
原创 关于https的加密流程简介(图解)
但是因为一个服务器通常对应着许多客户端,所以我们在应用当中,实际上是先让客户端将自己的秘钥发给服务器,让服务器确认自己的目的。所以秘钥也变成了一个网络数据,需要在网络上进行传输,一旦涉及到传输,那么秘钥就很有可能被抓包窃取。所以使用对称加密的方式无法保证我们的数据安全了,所以我们随着网络的发展,我们引入了非对称加密。理想情况下,只要没有人能获取我的秘钥,那么我的数据就是非常安全,没有人能够知道里面的内容。在网络发展的初阶,为了保护数据安全,防止黑客攻击,我们发明了对称加密。所以我们接下来进入了证书。
2023-07-06 13:09:55
874
原创 HTTP 协议的基本格式
每当数据交互的时候,在服务器就会存储当前数据请求响应所需要的答案,每当接收到相同请求,服务器就能直接将存储的答案返回给客户端,节约了大量计算成本。在我们抓包遇到的环境中,其中85%的情况都是GET请求。让我们来看看fiddler抓包的下的实际报文情况。存储了你当前网页是从哪个网页跳转而来。在http1.1中,有如下方法。剩下的5%的情况下是其他请求。10%的情况是POST请求。以上是发送的http报文。
2023-07-06 08:46:11
1201
原创 CSS选择器常见用法
在style中创建某个类,只要某个标签用到了该类,那么使用该类的标签就会变成类中的样式。也就是标签选择器的进阶版,使用*号代替全部的标签,极少情况下能够使用。和类选择器近乎一样,唯一的不同点在于,id选择器只能被一个标签使用。标签选择器的进阶,指定某个标签中的某个小标签是什么样式。类选择器的进阶,指定使用了该类的某个子标签是什么。如果多个选择器同时作用一个标签对象的时候。就是选择这个标签下的所有内容。因为效果会覆盖所有的标签。
2023-07-05 11:36:48
240
原创 HTML 中的常用标签用法
其实一般情况下,我们只需要在href里面输入跳转的地址,然后再加上文字说明都能够让人知道跳转的地方在哪里,所以不用特地加上name或者title。自带换行,但和div的换行不同,你可以理解成P标签实际上是从新另起了一段,所以间距比较宽。br就是直接换行,类似于“\n”,hr也是直接换行,但是要在两行之间增加一个横线。正常来说,一般的页面应该有三部分组层,分别是head,body,foot。字体变斜,em和i效果一样,你可以理解为em是全称,i是简写。数字越小,排行越大,体积越大。不换行,仅仅是包裹字体。
2023-07-05 09:39:41
557
原创 UDP 的报文结构和特点
这是存在于各大教科书上的其实我们应该这样来看更好理解,从上到下从左到右源端口号:发送方地址目的端口号:接收方地址UDP长度:UDP报头+UDP载荷, 2个字节=64KB(固定不变),这是UDP能接受的最大内容校验和:检测数据是否出错。
2023-06-28 19:35:59
308
原创 网络初识知识小结
当我们识别到了IP地址,将数据发送给相应的IP地址之后,端口号就是该主机上某个进程的地址,能让数据找到相应的进程(比如QQ音乐,哔哩哔哩,这些都有唯一的端口号)4.数据链路层把获得的消息打包,加上属于自己的报头,然后传输给物理层。2.数据链路层解析这个包,去掉属于自己的报头,然后把包传递给网络层。3.网络层获得的消息,加上属于自己的报头然后打包传输给数据链路层。3.网络层解析这个包,去掉属于自己的报头,然后把包传递给传输层。4.传输层解析这个包,去掉属于自己的报头,然后把包传递给应用层。
2023-06-25 11:35:00
854
原创 如何编写一个最简单的 udp 版本的 echo server 和 echo client(小白也懂!)
我们首先得清楚,在网络之中,肯定是服务器先启动,只有服务器先启动了我们的客户端才能给服务器发送指令。3.服务器接受消息包,并且对消息进行处理,将处理完成的消息重新打包,以ip地址返回给客户端。首先操作网络,我们需要Java为我们提供的一个名字叫做DatagramSocket的包。2.客户端通过对应的端口号,附上自己的ip地址,把消息打包发送给服务器让他处理消息。然后在创建一个对象,给这个对象实例化的时候,我们需要手动为其配置一个端口。4.客户端创建一个新的包,接受到了这个处理完成的数据。
2023-06-25 01:55:34
738
原创 File 类,InputStream, OutputStream 的用法
运行原理和字节流读取一样,唯一不同的是在屏幕上显示的是字符而不是ask表对应的数字。我们先在D盘创建一个名字叫做hello.txt的文件,然后输入hello。基本方法: read() :读取一个字节的数据,返回-1代表读取完毕。那么File类的操作实际上就全部是对文件进行操作。这种方式一定要注意在最后使用flush方式。否则会什么都没有但是程序依然不报错。基本方法: write()把存储在内存中的字节流拿出来。File翻译过来"文件"(读写的基本单位是字节)就是从文件里面读取数据。就是向文件里面写数据。
2023-06-23 17:24:49
614
原创 IO、存储、文件系统的简单介绍
I(input):放入数据O(output):取出数据所以我们平时说的IO,实际上就是放入数据和存储数据的意思在这里,我们一般将IO又分为两大类1.IO是存储和读取数据,也是计算机最重要的操作2.数据存放在各类设备中,比如硬盘,内存,U盘上3.数据依靠文件系统进行管理。
2023-06-23 15:57:58
505
原创 CAS简介
简单来说就是进行原子性操作比如,我们可以将上面的加锁和解锁替换成CAS中的原子操作所谓CAS的原子操作类,指的是java.util.concurrent.atomic包下,一系列以Atomic开头的包装类。如AtomicBoolean,AtomicUInteger,AtomicLong。让我们用一用//将int count变为AtomicInteger count = new AtomicInteger()i < 10000;i++) {//使用原子性的++操作});i < 10000。
2023-06-23 15:20:39
411
原创 死锁的成因以及解决方案(简析)
如果是不可重入锁,那么我们在执行完输出语句"执行1"之后,因为锁是任然在do1手中,没有释放,那么我们是不能执行do2(),这个语句的。如果单个线程被连续加锁两次及以上,成为了不可重入锁,那么该线程就造成了死锁(一般的synchronized是可重入锁,不会造成死锁)4.循环等待.线程1 等待 线程2释放锁,线程2 要释放锁得等待线程3 来释放锁,线程3 释放锁得等待线程1 释放锁。3.请求和保持.有多把锁,线程1拿到锁A后,不想释放锁A,还想拿到一个锁B。1.互斥使用.锁A被线程1占用,线程2就用不了。
2023-06-23 13:15:57
728
原创 HashTable, HashMap, ConcurrentHashMap (简析)
1.hashMap、hashtable的主要区别在于安全性、同步性、速度,要根据场景来选择不同的数据结构;2.hashtable是一个过时的类,现在使用线程安全的ConcurrentHashMap。2.hashtable、ConcurrentHashMap都是线程安全的,hashMap是非线程安全的;
2023-06-23 12:39:57
42
原创 Java线程池小结
简单来说,就是在系统的内存里面开辟一个容器用来存放线程一旦线程结束之后,系统不会立刻回收销毁该线程,而是等他继续在容器里面如果有其他任务需要调用该线程,就直接从容器里面拿出来从而不必重新new和销毁线程。
2023-06-22 17:26:02
304
原创 Java多线程用Timer完成定时器简析
假如我有三个线程,要求在第一秒打印线程1,第二秒打印线程2,第三秒打印线程3。是Java中的一个已经实现的方法,我们可以调用它为任务进行到点执行。
2023-06-22 15:32:16
73
原创 Java多线程阻塞队列(BlockingDeque)的简析
既然叫做阻塞队列,那么他就满足两个特性1.队列:先进先出2.阻塞:空了不让出,满了不让进(1)如果队列为空,尝试出队列,就会出现阻塞,阻塞到队列不为空为止;(2)如果队列满了,尝试入队列,就会出现阻塞,阻塞到队列不为满为止。
2023-06-22 14:22:00
690
原创 有三个线程,分别只能打印A,B和C要求按顺序打印ABC,打印10次(多种方法,小白也懂)
就...相当于创建三十个线程了....如果实在想不起来其他方法就用这个吧....那么我们就可以让三个线程按顺序阻塞和解锁,就能完成打印。简单来说我们有一个名为LockSupport的方法。实际上就是把第一种方式换为用这种方式实现。我们要循环打印ABC三个线程的三个字母。unpark就是取消阻塞让其继续执行。同样还是控制加锁顺序和解锁顺序罢了。park就是阻塞当前进程。
2023-06-22 13:01:04
2480
2
原创 关于Java中单例模式(饿汉模式和懒汉模式)的简析
简单来说,就是我们在程序中通过代码进行限制,在该程序中只能创建一个对象二.饿汉模式和懒汉模式因为只能创建一个对象,所以对于我们而言就有两种方式第一种方式让程序自动在类中创建唯一的对象在类外不能被创建也就是饿汉模式代码//此处在类的内部一开始就自己创建了唯一的Student对象//提供private构造方法,让其在类外不能被调用//提供getInstance方法,以便获取唯一的Student对象return st;//此处的st2,和st3都指向唯一的st对象,还是只存在唯一一个对象。
2023-06-22 10:43:52
1587
原创 JZ4 二维数组中的查找(牛客Java,三种方法)
数据范围:矩阵的长宽满足 0 \le n,m \le 5000≤n,m≤500 , 矩阵中的值满足 0 \le val \le 10^90≤val≤109。将二维数组的每个一维数组传入二分查找,如果找到就返回true,没有就返回false。这样我们就可以通过大小来控制遍历数组,如果找到返回true,没有就返回false。进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n+m)O(n+m)遍历整个二维数组,找到返回true,否则返回false。给定 target = 7,返回 true。
2023-06-21 22:40:59
759
原创 关于Java多线程不安全的问题简析
在了解多线程不安全的问题之前让我们先来看如下代码简单来说就是线程一和线程二同时循环加10000次按照常理来说10000+10000=20000但是运行结果如下由此,引入了我们的多线程安全问题其实我们这里看到的++操作,其实是在内存中是分为三步的load 把内存的数据读取到 CPU 寄存器上add 把 CPU 中寄存器上的值进行 +1save 把寄存器中的值, 写回到内存中如果把运行的时间化为一个纵轴的话,可能就会出现以下打乱顺序的情况。
2023-06-21 20:17:29
462
原创 Java线程的六种状态(付代码解释)
Java线程一共有六种状态,分别是新建状态(New)运行状态(Runnable)阻塞状态(Blocked)等待状态(Waiting)计时等待状态(Timed Waiting)终止状态(Terminated)
2023-06-21 19:33:49
1388
原创 Java中Thread 类的五种基本用法(简介)
这个时候就先打印了函数,五秒之后再打印线程里面的内容,这就是休眠sleep的用法!不就是我们在打断方法的时候用过的Thread.currentThread()吗。由于程序是并发运行的,但是运行线程的时候遇到了sleep,短暂休眠了5秒。就是自己设置一个变量,如果满足则线程继续执行,如果不满足则结束。5.使用匿名内部类,实现Runnable,重写run。4.使用匿名内部类,继承Thread,重写run。这我的这篇博客详细介绍了这五种方法的代码和实现。只要调用了join,那么后面的代码就一定后执行。
2023-06-21 12:53:50
1520
原创 Java创建多线程的五种写法
其实就是在Thread里面多了一个new Runnable。(线程和主程序运行结果可能会调换顺序)。(线程和主程序运行结果可能会调换顺序)。(线程和主程序运行结果可能会调换顺序)。(线程和主程序运行结果可能会调换顺序)。(线程和主程序运行结果可能会调换顺序)
2023-06-21 09:43:16
2284
原创 Java进程调度的基本过程(详细易理解)
了解这个问题之前,我们需要先打开我们桌面上的的学习资料啪的一下,很快啊,点双击学习资料.exe之后,在后台(ctrl+alt+delete,任务管理器)我们就能看到这个东西我们这里肉眼直观可见的这个XX游戏登录程序,就是我们所谓的进程桌面上的exe文件,只是起了一个发起调用的作用如果我们不点击exe文件,那么这个进程就永远不会被触发换句话来说不调用,不触发很好的一句废话。
2023-06-21 08:51:24
421
原创 如何使用idea对数据库进行简单的增删操作(手把手详细,付源码)
下载相应的Mysql操作文件选择与自己Mysql大版本相同(小版本随意)的下载点击进入。
2023-06-20 23:57:38
2343
原创 javase个人小结
封装:就如同我们使用的计算机,计算机给用户只提供了开机和关机键的功能,像计算机内的CPU等等元件我们是不管的,我们把这种隐藏内部,只提供使用接口的方式成为封装。列如,我有一个学生类,有一个姓名属性,为了保护这个属性,我将其设为private,后面只能用get和set接口调用。简单来说,就是一个类,能够继承另一个类的所有东西,并且在此之外还能拥有自定义的东西。因为一个类只能继承一个类,所以为了实现多继承,我们出现了接口。一、简单来说,java的异常分为两类,运行时异常和编译时异常。什么是封装,继承,多态。
2023-05-23 18:03:59
542
1
原创 Java异常简析
一般来说,我们遇到的通常是运行时异常,这个时候我们可以使用try catch来解决。A:将所有try catch代码取消,就一个光代码,看看报错,列如。一、简单来说,java的异常分为两类,运行时异常和编译时异常。Q:如果不知道括号里面填什么错误类型怎么办?第二步:继承总异常,然后创建一个有参一个无参。第一步:新建一个自己的异常类。二、遇到异常怎么办?
2023-05-23 17:43:44
58
原创 图书系统小练习(文末附源码)
10.下面我们将要调用他,首先我们将这些方法使用数组存储,比如下标0对应增加操作,1对应删除操作,所以我们需要在父类增加一个数组。1.对于任何系统,我们最先想到的就是普通用户和管理员,所以我们第一件事情就是创建一个包,里面包含。3.我们姑且把管理员和用户的菜单做完了,现在来调用看看,我们写一个login()方法看看。6.下面我们就来创建 书,对于书我们给两个,一个是关于数的属性,一个是用来存储书的数据。记住,private!9.好了书和管理员已经弄好了,下面我们该来进行操作的实现了。
2023-05-23 15:48:43
372
1
thread创建的五种方式
2023-06-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人