自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mybatis的最基本使用

二者的区分就是是否保存数据,现在数据非常宝贵,可以通过日常数据得知每个人的偏好和各种信息,所以现在一般都是采用逻辑删除来进行保存信息。id写的是实现的方法名,resultType则是返回的类型,返回的是对象,或者list, 此处定义的都是返回的数据的类型。虽然如果只有一个参数,SQL的名称可以为任意的,但是还是将名称改为与其对应的,代码可读性高,以后也比较好进行修改。Mybatis 会自动的根据数据库的字段名和Java对象的属性名,进行映射如果名称一样.就讲行赋值。左边是数据库,右边是java对象的属性。

2024-04-26 16:00:31 488

原创 Mybatis

逻辑删除:指从逻辑上进行数据删除。二者的区分就是是否保存数据,现在数据非常宝贵,可以通过日常数据得知每个人的偏好和各种信息,所以现在一般都是采用逻辑删除来进行保存信息。在启动类上面注解的后面加了(exclude = {DataSourceAutoConfiguration.class}),其意思是Spring Boot将不会自动配置。在运行时,报这个错误时是有可能org.springframework.beans.factory.UnsatisfiedDependencyException。

2024-04-25 21:44:37 246

原创 Spring日志

SLF4J充当了一个门面(Facade),隐藏了底层日志框架(如Logback、Log4j、java.util.logging等)的细节,使得开发人员可以在不改变代码的情况下轻松地切换和配置不同的日志实现。通过SLF4J,开发人员可以在应用程序中使用统一的日志API,而不需要关心具体的日志实现,这样就降低了应用程序的耦合度,并且使得日志记录变得更加灵活和易于管理。他不是一个真实的日志框架,只是一个日志框架的代表(门面模式)框架里面的具体内容是由log4j/log4j2/logback/jul实现的。

2024-04-25 15:23:27 366

原创 Spring Boot 的文件配置

文件配置内容中的类型以自己实际为准,不会随便进行转化除了数字10这样类似的,因为无论是哪种类型其都可以,不像dsasda这串字符一样,其只能为字符串类型,不然会报错。使用单引号时,内容表示成了\n,而不是换行,所以认为是转义使用双引号时, \n表示成了换行,也就是\n的本来含义。切记@value配置中的文件名必需于配置中的相同,如果去掉$,就会把""中的值赋值给当前变量。下述代码可以从配置文件读取全部数据,pre里面必需与配置文件中的前缀名相同。key value的形式,以=分割。\n本身表示的是换行。

2024-04-24 20:27:38 477

原创 Spring MVC和Spring Boot

并且使用@bean注解时,bean的名称必需是类名,否则不能找到对应的bean对象。

2024-04-24 19:12:00 1366 2

原创 Spring MVC

Spring MVC:以前在编写网页时,会将网页的编写分为三个部分,MVC其分别表示三个不同的部分模型(Mode),视图(View),控制器(Controller),来进行分布实现,同时展开。现在,由于前端和后端的界线开始划清,工作中的分工开始明显,所以后端现在基本上只负责后端的处理,也就没有了View层了,现在View表示的是视图所需要的数据。

2024-04-14 12:09:56 1285

原创 回顾

在Java中,每个类都有一个对应的类对象,它代表了这个类的整个定义。在Java中,可以使用一些开源的数据库连接池实现,比如Apache Commons DBCP、HikariCP等这些连接池实现通常都提供了单例模式的管理方式,确保在应用程序中。: 在应用程序中记录日志是一项常见的任务,可以使用单例模式创建一个全局的日志记录器,确保所有部分都使用同一个日志对象来记录日志信息。: 在多线程编程中,线程池是一种常见的技术,可以使用单例模式创建一个全局的线程池对象来管理应用程序的线程池。因此,通过添加最上层的。

2024-04-09 23:45:45 509

原创 mysql中表的设计

一个学生只能拥有一个账号.一个账号也只能披一个学生拥有一个学生,只能在一个班级中,一个班级,可以包含多个学生1 一班1 张三 12 李四 13 王五 1一个学生,可以选择多门课程.—门课程,也可以包含多个学生.1 1 张三选了语文课1 2 张三选了数学课2 1 李四选了语文课2 3 李四选了英语课上述都属于设计数据库表结构的固定套路.

2024-04-09 15:59:49 943

原创 Mysql

内存:速度快,空间小,成本高,数据易失硬盘:速度慢,空间大,成本低,数据持久保存进入命令行客户端输入密码如果输入密码正确会如上图"数据库"指的是一个逻辑上的数据集合.一个mysql 服务器程序,可以在硬盘上组织保存很多数据其是通过表来组织的一个mysql服务器上,有很多存储不同信息的表将有关联关系的一些表放到一起,就构成了一个数据集合,此时就称为"数据库",而且一个mysql服务器上可以有多个这样的数据库的。

2024-04-08 19:29:11 1077

原创 Severt基本使用

war包Tomcat专属的压缩包. war里面不光有.class还有一些tomcat要求的配置文件(web.xml等)还有前端的一些代码(html, css, js)此处创建的是一种新的项目的形式称为Maven项目,Maven是Java 中的一个的构建工具,IDEA已经集成,不用额外下载安装,帮助你编译/打包代码的工具。并且上述这些资源都是可以在子类中进行重写的,在子类重写这些方法之后,这些方法也都是不需要咱们手动调用的,都是tomcat在合适的时机自行调用.charset=utf8");

2024-04-08 11:14:13 1180

原创 Severt和tomcat的使用(补充)

war包Tomcat专属的压缩包. war里面不光有.class还有一些tomcat要求的配置文件(web.xml等)还有前端的一些代码(html, css, js)context是浏览器访问时的第一级路径的写法如果不写就会使用项目名称,两者名称不一样不影响什么只是在浏览器的访问时写的第一级路径名称不一样。浏览器默认的解析方式,是跟随系统的. Windows 10简体中文版,使用的字符集是GBK.默认情况打的是jar包.jar里量但是tomcat要求的是war包.代码里有问题(配置文件, pom.xml)

2024-04-07 21:12:03 387

原创 Severt

此处创建的是一种新的项目的形式称为Maven项目,Maven是Java 中的一个的构建工具,IDEA已经集成,不用额外下载安装,帮助你编译/打包代码的工具。必须要遵守Tomcat的要求.否则Tomcat识别不了,也就无法执行你的代码了.当tomcat收到一个GET请求的时候,就有可能执行这个子类的内部代码。此处的包是来自前面引入的severt库中的如果标红前面库的引入有问题。手动导入maven中央仓库,找到需要的servlet的jar包.找到下面的Maven将其中的代码复制到IDEA中的pom.xml。

2024-04-07 20:19:23 235

原创 Tomcat的安装

写好的一个网站,就可以打包成war包,拷贝到tomcat的webapp里tomcat就会自动对war进行解压缩,从而完成网站的部署和加载.2)环境变量问题(可能是tomcat找不到jdk,也可能是tomcat 找不到自己所在的目录)提示是缺哪个环境变量,就配置上即可.但是有前提,Tomcat是使用java写的.要求你的电脑上,必须得有JDK (至少得有JRE)webapps 中,每个目录,都是一个webapp(就包含了一个网站的后端代码和前端代码)如果启动的时候, tomcat闪退了?

2024-04-07 11:16:55 340

原创 HTTPS加密协议

然后客户端不知道pub2是黑客的以为就是服务器的呢 ,于是就使用pub2针对对称密钥进行加密了.黑客收到加密的对称密钥之后,因为这个密钥是使用pub2加密的.需要使用pri2解密.现在就需要每个客户端,在和服务器建立连接的时候,就把密钥给生成出来(涉及到一些随机数机制在里面,保证每个客户端生成的密钥都不同)颁发证书的时候,公证机构,就会针对证书中的各个属性,计算出一个校验和,并且针对这个校验和进行加密,就得到了数字签名.黑客知道了通信的密钥.后续传输的加密数据.黑客就可以很轻松的进行解密。

2024-04-07 10:36:22 365

原创 HTTP协议报文的结构的补充和from表单以及ajax表单

(query string 是键值对.其中 key就是input输入框的 name属性, value 就是输入框中用户输入的内容)表示了这次请求对应的响应,是什么样的状态(成功,失败,还是其他的情况.还有及其对应的原因)就可以给旧的地址挂一个重定向响应.访问旧地址的用户就自动跳转到新的地址.可以有多个属性.多个键值对之间使用空格来分割.键和值之间使用=分割.form只支持get 和post,不支持其他的 http方法.现在的网站,主体都是通过ajax的方式来进行交互的.键不需要有引号.值需要有双引号.

2024-04-06 23:10:07 361

原创 HTTP协议报文的结构

点击登录的时候,就会把用户名和密码放到url中,进一步的显示到浏览器地址栏里.(不就被别人看到了吗)相比之下,POST 则是在body中,不会在界面上显示出来,所以就更安全。在程序运行过程中,会有一些数据,需要在浏览器这边存储的.并且在后续请求的时候数据可能需要再发给服务器上次登陆时间.上次访问时间.用户的身份信息.累计的访问次数等。目前的浏览器和服务器的实现过程中, URL可以非常长的.(甚至说可以使用URL传递一些图片这样的数据。服务器返回数据给浏览器,也需要设置合适的Content-Type,

2024-04-06 10:04:19 833

原创 DNS和HTTP

而且有一套自动的系统会将域名解析为对应的IP地址。搭建DNS服务器的人号召有能力的网络运营商来搭建相同功能的DNS镜像服务器,其数据从他们这里来进行同步。那就第一次让其去访问DNS服务器,第一次访问之后就在本地留下缓存,然后以后无论多少次直接访问本地缓存保留的信息来直接进行访问。数据可能是硬盘的数据,也可能是内存的数据,也可能是通过网络访问其他服务器拿到的数据,还可能是通过cpu计算出来的一些数据。于是就有DNS系统的出现其由一群大佬搭建的一组服务器,他们将整理号的对应关系就存储在DNS中。

2024-04-05 11:02:13 1411

原创 网络层

我的电脑先构建一个数据包请求,然后发送到运营商服务器中,运营商服务器是一个NA设备,对我的电脑的IP进行转化称为外网IP(内网IP无法在外网中使用),然后发送通过广域网到达目标服务器。假设构造一个数据包,目的IP写作不存在的IP.这个数据包不可能到达目标.显然这样的包,也不可能允许在网络上一直存在.就能解决这样的问题。现今,通常都是一个小区/一个学校/一个公司,都是构成一个大的局域网(这一个局域网中可能就有几千,上万个设备)描述的是IP数据包的载荷部分,是一个UDP包还是TCP包(传输层协议是哪个)

2024-04-04 12:37:04 694

原创 UDP和TCP之间的对比

如局域网内部之间(如机房)的主机进行通信,局域网内部之间通信的结构比较简单带宽充足也不容易丢包也希望机器之间能传输更快。如果要进行“广播传输”,优先考虑UDP,UDP天然支持广播,TCP不支持(需要额外代码来实现 )如果要传输比较大的数据包,TCP更为优先(UDP有着64kb的限制)TCP怎样实现可靠传输将其的逻辑加入到UDP中。广播传输:将数据发送给局域网内的所有机器。如何基于UDP实现可靠传输?

2024-04-04 10:49:11 854

原创 String

final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内 容是可以修改的。对String类进行修改时,效率是非常慢的(因为其内部要创建许多临时变量) 使用StringBuffer或者StringBuilder是快的。value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中 的内容可以修改。与equals方法不同的是,equals方法返回的是boolean类型,而compareTo方法返回的是int类型。

2024-04-03 09:25:31 371

原创 TCP的十个重要的机制

在实际的网络传输中就也有可能会出现这样的后发先致的情况(一个数据包在传输的过程中,走的路径可能是非常复杂的,不同的数据报走的不同的路线)。(初始的等待时间是可以配置的。不同系统的时间不一定一样,也可以通过修改一些内核参数来进行改变时间,等待的时间也会进行动态变化,每多经历一次超时,等待时间都会变长)因为收到的数据是1-1000,所以1001之前的所有数据,都被B收到了或者也可以理解为B向A要从1001开始的数据。握手这个操作,不是TCP独有的,甚至不是网络通信独有的,计算机中的很多操作,都会涉及到握手。

2024-04-02 14:59:53 1079

原创 网络应用层和传输层

如日常生活中的点外卖,(会涉及程序和服务器之间进行的网络通信交互)当我们点开外卖软件,我们其程序读取我们的位置信息之后,程序会会发送请求发送我们的位置信息和用户信息(一般会有格式对于请求来说,这里使用文本的方式。前面的字节少1后面的字节多一。键值对之间使用”,“来进行分隔,键和值之间,使用”:“来进行分隔,键的格式固定为String类型,值无所谓。检验和本质上是一个字符串,其体积比原始数据更小,又通过原始数据生产的,原始数据相同得到的校验和一定相同,反之,校验和相同原始数据大概率相同(不同的概论很低)。

2024-04-01 10:44:33 1134

原创 回顾

如果定义类时没有一个构造方法给类的成员变量进行赋值的话,那么输出其类的成员变量时会输出类的地址(java中会自动调用toString方法输出类的地址),在类中定义一个toString 方法返回其值就可以解决输出为地址。在父类的构造方法当中可以调用子类和父类重写的方法此时会调用子类的方法此时也发生了动态绑定(不要使用并且此时子类的成员变量也没有被初始化其值为0)克隆一个父类的子类的全部成员变量后,使其全部复制,但其和刚才拷贝的值还是指向原来的父类 其父类的值改变两者都改变(浅拷贝)三目操作符 exp1?

2024-03-31 23:51:31 499

原创 网络编程的实际案例

,使用Try来进行自动关闭,在使用try进行自动关闭时,try这一块的代码在运行完毕时,会自动生成 close方法,如然后这个方法会被插入到finall块中确保在try执行完之后会被关闭资源,并且如果发生异常的话,也会先执行finally块,然后在抛出异常的。线程池的方式是可以降低"频繁创建销毁线程的开销"但是,如果同一时刻有大量的客户端来连接,就会使系统上出现大量的线程如果一个机器有个几百个线程,还能勉强跑一跑.如果是上万个线程甚至更多,这个机器是非挂不可。导致其第二个线程无法运行。

2024-03-31 15:47:19 665

原创 网络编程

如果字符串中的内容全部是英文字符,字节和字符个数是一样的,包含中文不行 因为一个英文字符占一个字节,中文字符占3个字节 ,response.length()这个方法返回的是字符数,也就是有如果有2个英文字符会返回2,有两个中文字符也返回2,客户端不可控,客户端在用户的电脑上,每个用户的电脑上安装的程序不一样,占用的端口不一样,用户这边如果出现端口冲突,也不会理解这些什么错误,一般会认为是程序的问题。计算机中这种抽象的连接是很常见的,这里的连接本质上就是建立连接的双方,各自保存对方的信息。

2024-03-30 14:44:32 1269

原创 删除公共字符串从第一字符串中删除第二个字符串中所有的字符

例如,输入”They are students.”和”aeiou”,则删除之后的。

2024-03-29 11:17:44 114

原创 抽象类和接口以及Object类

使用抽象类的场景就如上面的代码,实际工作都不通过父类完成,而通过子类完成.那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的.但是父类是抽象类就会在实例化的时候提示错误,让我们尽早发现问题。如同经常使用的Animal动物类,Dog类,Cat类,Dog类和Cat类都是继承于Animal类,但是Animal类中没有足够的数据去创建Animal动物,所以我们就可以将Animal设置为抽象类。在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。

2024-03-29 10:00:40 932

原创 实现阻塞队列

/ 使用 while 的目的是为了在 wait 被唤醒的时候, 再次确认一下条件.// 队列不空, 就可以把队首元素 (head 位置的元素) 删除掉, 并进行返回.// 这里的 wait, 需要由另外的线程唤醒.// 任务执行完了, 就可以从队列中删除了.// 添加了新的任务, 就应该唤醒.// 生产者, 消费者, 分别使用一个线程表示. (也可以使用多个线程)// 扫描线程, 需要不停的扫描队首元素, 看是否是到达时间.// 此处这里的最大长度, 也可以指定构造方法, 由构造方法的参数来制定.

2024-03-27 23:46:07 250

原创 多线程实际应用案例

并且虽然着两个代码是相邻的,但是其执行时间时间可能存在较大差,比如加锁情况下可能会导致其阻塞,加锁可能是10.28执行,判断instance是否是空可能是在10.40执行在这执行期间,instace可能被修改(?刚才线程不安全是因为在instance被初始化创建之前的,没有初始化创建之前,多线程之间调用getInstance就可能同时涉及到读和修改操作,但是instance被初始化创建之后,if条件虽然不执行了,不用担心修该操作,线程安全了。队列不为空,入队列,也会发生阻塞,阻塞到队列不满为止。

2024-03-27 11:35:37 638

原创 多线程死锁,java内存模型,wait、notify方法

在这个方法中实现了在外面对方法的加锁(当一旦运行这个方法时,运行这个方法的线程立刻加锁),又在内部实现了对this对象也就是对自身的加锁对这个线程的加锁。可重入锁的内部,会记录当前的锁被哪个线程占用的,也会记录加锁次数,比如当线程a对自己进行第一次加锁时,内部会记录为线程a加锁次数1,然后线程a在进行加锁时就只是将加锁的次数由1改变为2来进行统计加锁的次数,此时没有真正的进行加锁,只是伪加锁,后续在进行解锁的时候由于只是进行的伪加锁所以只将次数减一就好,直至减到0时,才真正进行锁的解开。

2024-03-26 15:12:43 748

原创 (进程线程)的状态和线程安全

主流编译器是由各种各样顶尖的人进行实现的,里面会由多种的优化方式,这里面会有各种的优化,当编译器中的代码处于哪种情况时,就会产生这种类似的优化,这种优化会大大提高执行效率不改变内在逻辑。日常写的很多代码,在前在后的顺序无所谓不影响程序的正常运行但是在前在后的执行效率是不一样的,所以编译器就会智能的调整这里代码的前后顺序从而提高程序的效率,保证逻辑不变的前提,再去调整顺序。,比如读取变量的值,只是对应一条机器指令,此时这样的操作本身就可以视为是原子的,通过加锁操作将好几个指令给打包成一个原子的了。

2024-03-25 18:57:32 763

原创 线程的创建

通常认为Runnable这种写法比较适用于实际,因为Thread是继承于类的但java中不能多继承所以就比较难与和其他线程进行交互,而Runnable实现的是接口,java中可以有多接口可以更好的与其他线程进行交互,并且这样还能使线程与线程之间的耦合更小。线程之间的执行是按照调度器来安排的.这个过程可以视为是"无序,随机"。run方法内部的描述了这个线程的内部要执行哪些代码,因为每个线程都是并发执行的(自己执行自己的),使用需要告知这个线程,执行的代码是啥,run方法是线程创建之后才会被执行的。

2024-03-24 15:17:55 321

原创 操作系统中的进程

在电脑中进程就是一个个运行起来的电脑程序(QQ等),在我们一般的电脑中这些软件的存储地址都在c盘d盘e盘中的任意一个,他们的存储形式是以文件的形式存储的,一旦点击这些文件中的.exe文件,操作系统就会把这个.exe文件给加载到内存中,并让CPU开始执行.exe文件中内部一些指令,我们就将运行起来的这些文件称为进程。在操作系统中同时运行许多进程,当某个进程出现了bug进程崩溃了会影响到其他进程运行吗,现在的操作系统能够做到这一点就是依靠进程的独立性来保证的,依靠了虚拟地址空间。

2024-03-23 23:18:39 577

原创 继承和多态

继承和多态

2024-03-23 16:40:23 276

原创 多线程的创建

创建进程时的消耗的资源包括内存,cpu时间,线程调度的开销,同步开销(多个线程访问共享资源时,会进行同步控制),线程创建和销毁时,上下文切换的开销(一个线程切换到另一个线程,尤其在高并发的场景)线程一般是指执行代码的最小单元,一个软件(应用程序)包含一个或者多个线程,并且这些线程共享同一进程的内存空间。进程一般是指正在执行的程序的一个实例,也就是在电脑上将一个软件(应用程序)执行的话,他就是一个进程。创建线程时消耗的资源包括内存资源,cpu资源,上下文开销,系统调度资源,线程创建和销毁。

2024-03-23 00:44:37 163

原创 类和对象

这些问题的解决就是依靠this引用,this引用会调用当前对象的成员方法和变量,类似于上面的操作时都是于this引用实现的,只不过他一般是隐式调用,但是我们在以后的使用中必须加上this.引用以便代码可读性性更强。类就像是一个模型,可以使创建出来的对象约束在这个模型里,但其具体细节部分可以自己进行修改(类有点类似设计图,通过这个设计图可以建造出不同的房子但最后创建的房子的外部风格差不多一样最多只有里面的房间有些差别)。//(类的属性就是这个物有啥类似于手机有屏幕也有电池cpu等)成员变量。

2024-03-21 10:49:33 456

原创 数组的定义和使用

/直接访问数组下标为0的值。//直接访问数组下标为1的值。访问数组时都是从下标都是从0开始的,并且数组可以通过下标来直接访问任意位置的内容。数组就是相同类型数据的一个集合就是。静态初始化:创建数组时不直接指定数据元素的,直接设置数组内的元素。动态初始化:创建数组时直接指定数组中元素的个数。{}里面的数据类型必须与[]里面的数据类型一致。数组的初始化分为动态初始化和静态初始化。遍历就是将其内的数据依次访问打印一遍。注将数组里面的值依次赋值给x.T代表存放数组元素的类型。T[] 表示数组的类型。

2024-03-20 16:58:15 173

原创 java多线程注意点

进程相互之间是相互独立的,分别有其虚拟内存,一个进程里面有多个线程,进程里面的线程之间相互共用进程里面内存空间和文件资源,线程之间换着使用。一个进程如果出bug了其他进程可能没事,一个线程出现bug,可能导致所在这个进程会bug .。进程和线程都可以解决并发编程问题场景,但进程在创建和销毁中,开销更大(时间和空间大),线程小所以线程也叫轻量化进程。线程是系统调度执行的基本单位(CPU),线程是进程内的执行单元。进程包含可以包含多个线程,线程不可以包含多个进程。

2024-03-20 16:00:13 102 1

原创 java中的方法

看其运行结果就会发现交换方法里面的值交换了,但是没有传递出来,main里面的值还是原来的值,这就是上面说的传递参数只是相等于将传递的数(实参)赋值给了方法的值(形参)他们的地址不一样,方法内部的值改变了,但外面的值还是原来的。递归的返回值一样依据要求的数据如同上面只是求前N项和,所以只是+其减一如果是前N项和那就是*如果是要求前N项每个数的阶乘相加一个递归方法不行就用两个来组合成返回值是(这个是每个数的阶乘)(n)+(这个是将其组合成相加联系)(n-1)方法体就是你要实现这个方法要写的代码。

2024-03-20 15:10:18 355 1

原创 迭代和递归的区别

迭代就是用循环来解决这个问题(关键在于要创建一个数来保存上一个循环记录的值)递归用return一直嵌套返回值(层层加码)。

2024-03-19 16:52:59 360 1

空空如也

空空如也

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

TA关注的人

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