- 博客(91)
- 收藏
- 关注
原创 「Spring MVC」Session、Cookie
1. 介绍 Session 和 Cookie,以及如何获取它们。2. 如何获取 Header
2024-08-14 08:22:33 1838 9
原创 「JavaEE」Spring IoC:依赖注入
依赖注入描述的是一个过程,指的是 IoC 容器在创建 Bean 时, 提供运行时所依赖的对象通俗来讲就是把对象取出来放到某个类的属性中Spring 提供了三种依赖注入的方式:属性注入(Field Injection)构造方法注入(Constructor Injection)Setter 注入(Setter Injection)
2024-07-31 16:00:00 1545 5
原创 「JavaEE」Spring IoC:Bean 的存储
IoC 全称 Inversion of Control,即控制反转控制反转是指控制权反转:获得依赖对象的过程被反转了传统开发模式中,需要某个对象时,我们要自己通过 new 来创建对象, 现在无需自行创建, 而是把创建对象的任务交给容器, 程序中只需依赖注入 (Dependency Injection, 简称 DI) 就可以了。这个容器称为 IoC 容器Spring 是一个 IoC 容器, 所以 Spring 有时也被称为 Spring 容器。作为容器, 它具备两个最基础的功能:存和取。
2024-07-30 20:19:47 1387 1
原创 「网络通信」HTTP 协议
HTTP 协议全称为超文本传输协议,超文本比文本更加强大,它不仅包含字符串,还可以携带一些图片、特殊格式等HTTP 最主要的应用场景就是网站。浏览器和服务器、客户端和服务器之间传输数据的协议,很可能就是 HTTP。
2024-07-14 08:20:05 1496 1
原创 「网络编程」基于 UDP 协议实现回显服务器
操作系统给我们提供的进行网络编程的 api 称为socket api(网络编程套接字),具体到传输层,有两个重要的协议的 api ——UDP api和TCP api,本文我们介绍的是 UDP apiUDP 有四个特点:无连接、不可靠传输、面向数据报、全双工。这在后文中会解释Java 对系统原生的 api 进行了封装,UDP socket 有两个核心的类操作系统中有一类文件,叫作socket 文件,它和我们之前所说的“文件”不太一样,我们平时所说的普通文件、目录文件位于硬盘。
2024-05-29 10:58:22 2578 4
原创 「JavaEE」多线程案例分析2:实现定时器
定时器类似一个闹钟,时间到了之后就会执行相应的任务Java 标准库中已经实现了一个定时器的类 Timer在定义好 timer 之后可以调用schedule把一个或多个任务(TimerTask)添加到定时器中@Override},2000);第一个参数就是任务内容,每个任务后面都会带有一个时间(第二个参数),这个时间是“相对时间”,是以 schedule 时的时间为基准,过了相对时间后才执行比如 2000ms,它表示调用 schedule 后再过 2000ms 就会执行这个任务。
2024-05-14 09:07:32 916 1
原创 「JavaEE」多线程案例分析3:线程池
池”是一个非常重要的概念,我们之前学的字符串常量池就是一种常量池除了常量池,还有数据库连接池、线程池、进程池、内存池……提前把要用的对象准备好对象用完后也不要立即释放,而是先留着,以备下次使用我们主要来分析线程池它是存放线程的池,会把要使用的线程提前创建好,用完之后也不会立即释放,而是放回线程池里。这样就可以节省创建及销毁线程的开销那为什么从线程池里取线程就比向系统申请更高效呢?因为从池里取,这部分是通过代码实现的,代码是我们自己写的,是纯用户态的(可控的);
2024-05-14 09:00:00 1188 1
原创 「JavaEE」线程状态
这是一个经典的面试题,以下面代码为例:可以看到结果都输出“hello”这两者的区别在于:调用是创建一个新的线程,由这个线程执行打印 hello 的任务;而 则是调用 Thread 实例中的 run 方法,这个操作是在 main 主线程中打印 hello如果我们把代码改成下面这样:在 run 方法和 main 方法中写个死循环,此时 t.run() 就只打印 hello thread,主线程没办法再向下执行🍉终止线程一个线程,它的 run 方法如果执行完毕,那么它就终止了如果我们想让线程
2024-04-24 19:40:55 1382 3
原创 「JavaEE」初识进程
但是一个进程消耗 CPU 资源,这个要如何看待呢?比如选中某进程,点击“结束任务”,那么此时任务管理器就会获取到你选中的进程的 pid,然后调用一个系统 api,把 pid 作为参数传进去,从而完成杀死进程的操作。这里所说的 IO,可能是来自控制台的输入/输出(比如等待 Scanner 的输入,也可能是硬盘的输入/输出、网卡的输入/输出)就是 CPU 的核心先执行进程1的代码,执行一段时间之后,让进程1下来,换进程2上去……如果某个进程的代码出 bug 了,那么只会影响到当前这个进程,不会影响到其他进程。
2024-04-10 17:06:43 1386 51
原创 「JavaSE」Lambda表达式
Lambda表达式是Java SE 8中一个重要的新特性,基于数学中的λ演算得名,也可称为闭包,它允许我们通过表达式代替功能接口和方法类似,Lambda表达式提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)Lambda 表达式的优点很明显,在代码层次上来说,它使代码变得非常简洁。不过简洁是有代价的,那就是降低了代码的可读性,而且不容易调试。
2024-03-29 11:26:09 1419 12
原创 「MySQL」查询方式(5k字长文!超详细!)
前面我们讲查询时带表达式,比如成绩表中有语文、数学、英语三个科目,我们要查询总分,就要用到:这种查询方式实际上是在进行之间的运算而聚合查询,则是进行“行与行”之间的运算,不过这里行之间的运算有一定的限制——只能通过来进行操作,这就需要用到SQL提供的一些库函数了。聚合查询不像表达式查询那样随便写表达式就可以了下面我们来看一下常用的聚合函数:现在有一个学生表:这行代码得到结果为4,它就相当于先执行:然后再使用 count 来计算结果的行数大多数情况下,和没什么区别,在特定情况下才会有差异比如,往
2024-03-27 20:53:48 4629 13
原创 「动态规划」简单多状态dp问题
以经典问题“打家劫舍”来解释简单多状态dp问题和解决方法题目链接:打家劫舍I这种问题就是在某一个位置有多个状态可以选择,选择会影响在这道题中就是小偷在每一个房屋,可以选择偷或不偷,每一次选择都会影响最终偷窃金额代码如下:当然,我们要讲的肯定不止一道题,上面的题只是基础题。而当我们面对中等题、难题时,要有能力将它们转化为我们见过的题,下面以两道题示例:题目链接:打家劫舍II在这道题中,房屋的排列变成了环形如果偷第1个房屋,那就不能偷第二个和最后一个,此时第三个房屋到最后一个房屋其实是直线形,那就
2024-03-14 10:16:23 892 18
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人