
Java EE
文章平均质量分 93
馒头警告
这个人很懒,什么都没留下
展开
-
博客系统中的加盐算法
因为一个 字符串的 MD5 的值是固定的,当你有了一张 MD5 的穷举表(彩虹表)之后,这张表中记录了几乎所有字符串的 MD5 对照表,就可以对密码进行暴力破解。从密码中 拿到盐值之后,我们才能对原始用户输入的密码按照相同的路径进行加密,然后和最终的密码进行对比,从而判断用户输入的密码是否正确。每次调用方法的时候,产生盐值(唯一的),然后使用这个盐值再加上我们的密码,最终得到了一个密码。传统的 MD5 是有规律可循的,虽然 MD5 是不可逆的,但是是可以被暴力破解的。1、需要验证的密码(用户输入的密码)原创 2023-10-19 16:34:21 · 712 阅读 · 10 评论 -
后置处理 Bean
在 Spring 执行完对象的初始化操作后,可以运行 After 方法,进行价格。Spring 创建完对象,并进行注入后,可以运行 Before 方法进行加工。我们发现,此时并没有发生提示,这是为什么呢?所以为了解决这个问题,我们可以对这段代码进行修改;,这是 jdk8.0 的新特性,叫做。我们会发现,在这些方法前面,原创 2023-09-24 21:14:03 · 519 阅读 · 20 评论 -
对象的生命周期、配置文件参数化、自定义类型转换器
对象的生命周期,指的是一个对象创建、存活、消亡的一个完整过程显然,如果想要 Spring 来帮我们调用的话,我们得在配置文件中告诉 Spring这样,整个销毁方法就定义完了我们之前说过,在文件当中写的内容,都是 String 类型,但是我们却成功地把 "1" 赋值给了 id 属性,而 Product 的 id 属性,是 Integer 类型的为什么我们此时能把 String 类型的数据赋值给 Integer 类型的数据呢?原创 2023-09-21 19:27:47 · 712 阅读 · 18 评论 -
AOP 编程
JDK 代理 依附 Proxy.newProxyInstance( ) ,通过接口创建代理的实现类CGlib 代理 依附 Enhance ,通过继承父类创建的代理类。原创 2023-09-30 08:00:00 · 703 阅读 · 8 评论 -
Spring 的代理开发设计
切入点:额外功能加入的位置Spring 引入切入点的目的:由程序员根据自己的需要,来决定额外功能加入给哪个原始方法简单的测试:所有方法都作为切入点,都加入额外的功能通过 Spring 的配置文件完成expression :切入点表达式,要根据自己的需求来写-- 所有的方法,都作为切入点,加入额外功能 -->原创 2023-09-27 19:35:20 · 1297 阅读 · 15 评论 -
Spring 工厂
FactortyBean 是 Spring 当中用于创建复杂对象的一种方式,而且这种方式也是 Spring 原生提供的,后续我们学习 Spring 整合其它框架的时候,会大量应用到 FactortyBean在前面学习复杂对象的时候,我们说可以实现 factoryBean 接口,而 factoryBean 接口里面有一个叫做 isSingleton 的方法,这个方法如果 返回 true 意味着只会创建一个复杂对象,如果返回 false 就会返回多个复杂对象。原创 2023-09-19 15:48:15 · 987 阅读 · 16 评论 -
Spring 的注入
1、为成员变量提供 set ,get 方法2、 在配置文件中进行注入(赋值)在未来写项目的时候,是使用 Set 注入更多还是 构造注入 更多呢?使用 Set 注入更多1、构造注入比较麻烦(存在重载的问题)2、Spring 框架底层,大量应用了 set 注入综上,在未来,set 注入使用的更多。原创 2023-09-17 12:36:27 · 2329 阅读 · 22 评论 -
Spring 的创建和日志框架的整合
2、XML 的 id 属性的值,命名的时候要求:必须要以字母开头,字母,数字,下划线,连字符,不能以特殊字符开头,比如 / ,而 name 属性的值,在命名的时候,是没有要求的,所以 name 属性会应用在特殊命名的场景下,底层还是通过反射来实现的,因为反射能够调用一个类的私有的属性和构造方法,所以 Spring 工厂是可以调用对象私有的构造方法来创建对象的。那么,对于 Spring 来讲,它的工厂使用,和我们前面所总结的通用工厂的使用方式,本质上是没有区别的。原创 2023-09-13 21:57:58 · 829 阅读 · 16 评论 -
工厂设计模式
什么是工厂设计模式?通过工厂类来创建对象现在,作为工厂设计模式来讲,并不提倡通过 new 来创建对象,而是通过工厂类来创建对象这就涉及到了工厂的好处:解耦合要想理解好解耦合这个概念,就得先了解耦合耦合:指的是代码间的强关联关系,一方的改变会影响到另一方耦合最大的问题就是不利于代码的维护可以简单的理解为把接口的实现类,硬编码在程序中通过工厂类,就可以实现解耦合。原创 2023-09-11 18:21:24 · 667 阅读 · 12 评论 -
Spring 基础概念和核心思想
IoC = Inversion of Control 中文是 “控制反转” 的意思,也就是说,Spring 是一个 “控制反转” 的容器,那么怎么理解这句话呢?我们先来看几个例子:原创 2023-09-09 14:05:29 · 360 阅读 · 8 评论 -
JVM相关知识点
准确的来说,类加载就是 .class 文件,从文件(硬盘)被加载到内存中(元数据区)这样的一个过程加载:把 .class 文件找到(找的过程),打开文件,读文件,把文件内容读到内存中验证:根据 jvm 虚拟机规范,检查下 .class 文件格式是否正确准备:给类对象分配内存空间(现在元数据区占个位),此时内存初始化成全为0,也会使静态成员设置成 0 值解析:初始化字符串常量,把符号引用转为直接引用初始化:调用构造方法,进行成员的初始化,执行代码块,静态代码块,加载父类 .....原创 2023-09-06 20:01:18 · 480 阅读 · 6 评论 -
使用 Linux 相关知识部署博客系统
cat 和 echo 只是非常简单粗暴的读写文件,如果读写内容费差个简单,使用他们没有问题,如果读写内容更加复杂,就需要使用更加强大的编辑器了。1、服务器虽然配置高,但是上面跑的任务工作量大,也没有额外的资源给你运行玉兴界面,服务器要求稳定,Linux 图形化界面经常有 bug。使用 cd 的时候,切换的路径,不一定非要一个字母一个字母的输入,也可以使用 table 键来补全。本地的数据库,端口号,用户名,密码和云服务器的数据库可能是不同的,所以需要对原本的代码进行一个微调。原创 2023-09-04 18:13:58 · 948 阅读 · 6 评论 -
Tomcat
tomcat 的版本和后续学习的 servlet 版本 是强相关的,这里我选择下载的是 tomcat8,对应的 servlet 就是 3.1 的版本。8080 是Tomcat 默认的端口号,默认的端口号其实是可以修改的(但是我们目前没必要修改)我们使用 Tomcat ,最主要的用途,就是把写好的网站给部署上去,网站 = 前端 + 后端。现在,我们来访问一下 Tomcat 的欢迎页面(tomcat 自带的一个 webapp)点击这里,下载 zip 的压缩包,再进行解压缩,就可以了。原创 2023-08-31 15:19:35 · 529 阅读 · 0 评论 -
博客程序系统其它功能扩充
当设计好注册功能后,我新注册了一个账户,并登录该账户,发现该账户虽然并没有发布任何的博客,但是仍然可以查询到别的用户发布的博客内容,于是我对 BlogDao 中的方法和 博客列表页的 doGet 进行了一些修改。在最初代码编写的时候,我直接复用了之前发布文章的页面来实现对文章内容的修改功能,后来发现这样容易使发布功能和编辑功能混淆,最后将两个功能页面分开,重新编写了一个博客编辑的页面。在目前的代码中,我们的博客总数是固定的,无法实时显示该用户的博客总数,于是我们加一个接口来实现这个功能。原创 2023-09-03 13:44:44 · 1306 阅读 · 14 评论 -
博客系统 Java Web 开发(Servlet)
我们会发现,这是由于前端代码中出现了两个 title ,querySelector 默认返回的是第一个 title ,然后导致对标题的修改改错了地方。先发一个请求获取到博客列表,再发送一个 ajax 获取用户的登录状态,如果用户已经登录了,就没事,如果未登录,则页面跳转到登录页。内容中,会带有一些 markdown 的符号,最终显示到网页上,希望用户看到的是渲染之后的结果,也就是把 # 转换成一级标题。在 博客列表页,获取博客列表的功能下,前端要发什么请求,后端返回什么响应,都需要进行约定。原创 2023-09-02 13:19:55 · 1558 阅读 · 13 评论 -
表白墙程序
此处的约定,没有固定的强制要求,只要保证能够实现必要的需求即可,此处的目的是为了前后端可以对上号。请求时什么样的,响应是什么样的,浏览器什么时候发送请求,浏览器按照什么格式来解析....js 中要求, 对象中的 key 务必是 字符串,所以这里的 "" 可以省略。要插入的数据,是三个变量,要把这三个变量给填充到 Sql 中,就需要占位符。在之前的一篇博客中,已经写过了表白墙的页面代码实现,这里就不再重复了。当前我们的数据是在内存(变量) 中保存的,重启服务器就没了。所以,我们需要把目前这个对象转成字符串。原创 2023-09-01 19:53:50 · 12575 阅读 · 24 评论 -
Servlet
打包和部署程序这两个操作,我们可以使用 IDEA 的 Tomcat 插件,把 Tomcat 集成到 IDEA 中,这样就省去了手动打包,手动部署的部分,只需要按一下运行,就可以自动打包部署。如果是首次使用,此时这里的字可能是红色的,红色说明还没下载完,一般只要一粘贴,idea 的 mave 就会自动触发依赖的下载,下载完毕就不红了(下载只需要一次)这个对象是 Tomcat 自动构造的,Tomcat 其实是会实现监听端口,接受链接,读取请求,解析请求,构造请求对象等一系列工作。原创 2023-08-30 15:06:12 · 882 阅读 · 10 评论 -
HTTP 协议
(1)GET 也可以给服务器传递一些信息,只不过 GET 传递的信息一般都是放在query string;而POST 传递信息则是通过 body(2)GET 请求一般是用于从服务器获取数据,POST 一般是用于从服务器提交数据(语义上的差别)(3)GET 通常会被设计成幂等的,而 POST 不要求幂等(4)GET 可以被缓存;而POST 一般不能被缓存。原创 2023-08-28 14:59:24 · 2914 阅读 · 13 评论 -
网络原理详解(图文结合)
这一层,有很多现成的协议,也有很多时候,是需要程序员自己定义协议的在开发设计程序的时候,要提前做好良好的规划打开外卖软件,显示商家列表,列表中有很多项,每一项都包含了一些信息:商家的名称,图片,好评率,距离你的位置,评分......针对这些操作,我们做出如下设计:1、明确当前请求和响应中包含哪些信息(根据需求来的)请求:用户身份,用户当前位置响应:包含若干个商家信息2、明确具体的请求和响应格式原创 2023-08-22 12:13:24 · 1333 阅读 · 20 评论 -
轻松学会网络编程
网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。发送端:数据的发送方进程,称为发送端。发送端主机即网络通信中的源主机。接收端:数据的接收方进程,称为接收端。接收端主机即网络通信中的目的主机。收发端:发送端和接收端两端,也简称为收发端。注意:发送端和接收端只是相对的,原创 2023-08-18 10:31:03 · 742 阅读 · 8 评论 -
初识网络原理(笔记)
虽然路由器只有 4 个 lan 口实际上组建的局域网,可以有更多的设备,就可以用到交换机AP 相当于一个不用插网线的小交换机(提高无线热点扩容能力)这个定义是站在经典的路由器/ 交换机的定义上看待的实际上现代的交换机/ 路由器之间的差异越来越小了,之间的功能也是有很多重合的集线器是把一根网线,分成多个岔口,但是和交换机有本质区别局域网和广域网,并没有一个明确的界限当局域网中,设备数量非常多,局域网空间跨度特别大,就可以称为广域网了。原创 2023-08-18 20:00:00 · 2137 阅读 · 6 评论 -
文件操作 和 IO
我们只需要了解文件相关的一些接口即可操作系统通过 “文件系统” 这样的模块来管理硬盘NTFS 是windows 上的文件系统,背后有一定的格式来组织硬盘数据EXT4 是 Linux 上常见的文件系统。原创 2023-08-15 20:00:00 · 408 阅读 · 16 评论 -
Java多线程知识点,看这一篇就够了!(超详细)
1、饿汉模式(迫切)程序启动,类加载之后,立即创建出实例2、懒汉模式(延时)在第一次使用实例的时候,再创建,否则能不创建就不创建举个例子:编译器打开一个文件,假设有一个超大的文件,原创 2023-08-13 10:02:03 · 4759 阅读 · 19 评论 -
计算机是如何工作的(笔记)
用来存储数据的单位,是CPU的一部分寄存器,存储空间更小,访问速度更快,成本更高,掉电后数据会丢失寄存器的速度和从内存速度的差距是极大的,3~4个数量级操作数通常是要在寄存器中保存的由于寄存器和内存之间速度和空间上差异太大了,难以协调工作CPU 上要进行一系列运算,在运算的过程中,要反复用到一组内存中的数据,这些数据要频繁使用,又要频繁访问内存,同时这些数据又比较多,在寄存器中又存不下,就可以放到缓存中了缓存的存储空间介于 寄存器 和 内存 之间。原创 2023-08-02 21:03:59 · 362 阅读 · 4 评论