- 博客(32)
- 收藏
- 关注
原创 Spring两大核心思想 IoC和AoP
Inversion of Control(控制反转),也就是说“Spring”是一个控制反转容器。当需要某个对象时,传统的开发模式中需要new来创建对象,现在不需要再进行创建了,把创建对象的任务交给容器,由Spring来负责对象的创建和销毁,程序只需要依赖注入(Dependency Injection,DI) 就可以了。这个容器称为:IoC容器。Spring是一个IoC容器,有时候Spring也称为Spring容器。容器里面装的是对象,Spring管理的对象称之为bean。
2024-07-01 16:14:22
1012
1
原创 Spring Web MVC入门
⽐如: 厨房可以⽤来做饭, 但真实实现做饭功能的是⽕以及各种做饭相关的⻝材和⼯具. 厨房就好⽐是SpringBoot, 厨房可以装柜⼦, 实现收纳功能, 装燃⽓灶等, 实现做饭功能. 做饭这个事, 就是MVC, 在⼏千年前, 有⽕有⻝材就可以实现做饭。1、@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的 路由映射的. 表⽰服务收到请求时, 路径为 /sayHi 的请求就会调⽤ sayHi 这个⽅法的代码.他们 之间到底有着什么样的关系?
2024-06-06 21:22:47
692
1
原创 认识HTTP状态码(status code)
浏览器输入一个 URL, 目的就是为了访问对方服务器上的一个资源. 如果这个 URL 标识的资源不存 在, 那么就会出现 404 例如, 在浏览器中输入 www.sogou.com/index.html , 此时就在尝试访问 sogou 上的 /index.html 这个资源. 如果输入正确, 则可以正确访问到. 但是如果输入错误, 比如 www.sogou.com/index2.html , 就会 看到 404 这样的响应.永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址.
2024-06-06 16:07:31
759
原创 第一个SpringBoot项目
💭1、新建New ProjectIDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?🌟2、下载JDK 17🌟💭2、项目创建成功界面1、目录🌟2、pom文件🌟💭3、运行项目💭4、⽤ Spring Boot 来实现和浏览器及⽤⼾的交互。💭5、请求响应流程分析1、新建New Project。
2024-06-04 22:49:20
1606
5
原创 【无标题】
另外也可以打成可执⾏jar包, 这样的包就可以通过java -jar命令来执 ⾏ war包可以理解为是⼀个web项⽬,⾥⾯是项⽬的所有东西, 通常⽤于⽹站.”时出错:找不到JRE“11”。jar包和war包都是⼀种压缩⽂件 jar包就是把开发⼈员已经写好的⼀些代码进⾏打包.打好的jar包就可以引⼊到其他项⽬中, 也可以直 接使⽤这些jar包中的类和属性.打包就是把所有的class⽂件, 全部放在⼀起, 打成jar包或者war包。⽐如, 点击package, 就可以完成项⽬的打包操作。
2024-06-04 10:19:36
260
原创 Fiddler抓包工具的使用
1、抓包原理:👇2、抓包结果👇1)如何查看一个http请求的原始摸样:2)分析数据格式:3、请求格式分析👇4、响应格式分析👇官网下载:安装过程比较简单, 一路 next 即可.
2024-06-02 22:09:49
939
原创 网络层及其协议
所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目 的地。以下为北京市部分地图,可以看到,从西单到故宫博物院,路线1比路线2更近;路由就是规划类似行进 路线:1、网络层的作用2、认识IP地址1)IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址3)格式4)组成(网络号和主机号)5)分类3、子网掩码1)格式2) 作用3)计算方式1、协议头格式。
2024-06-02 16:13:18
724
原创 深入了解Socket套接字
一、引入🙌1、概念🎉2、分类🎉Socket 套接字主要针对传输层协议分为流套接字、数据报套接字、原始套接字(了解即可)三类。1)流套接字:使用传输层TCP协议2)数据报套接字:使用传输层UDP协议补充:1、通俗理解有连接和无连接🪄2、理解可靠和不可靠传输🪄3、面向字节流和面向数据报🪄4、理解全双工和半双工🪄5、网络传输数据的基本单位🪄datagram(报);packet(包);segment(段);frame(帧)二、通信模型🙌1、Java数据报套接字通信模型。
2024-05-25 22:55:35
805
原创 总结常见的六大锁策略
悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这 样别人想拿这个数据就会阻塞直到它拿到锁。乐观锁:假设数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并 发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。
2024-05-23 15:24:52
965
原创 什么是线程安全?如何保证线程安全?
一、引入线程安全 👇二、 线程安全👇1、线程安全概念🔍2、线程不安全的原因🔍抢占式执行(罪魁祸首,万恶之源)导致了线程之间的调度是“随机的”多个线程修改同一个变量修改操作,不是原子的(不可分割的最小单位)内存可见性,引起的线程不安全指令重排序,引起的线程不安全三、解决之前的线程不安全问题👇1、synchronized 关键字-监视器锁monitor lock🔍1)synchronized 的特性(1) 互斥(2)刷新内存(3) 可重入。
2024-05-22 12:20:40
1731
原创 贪心算法每日一题(摆动序列)
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如,是一个,因为差值是正负交替出现的。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。给你一个整数数组nums,返回nums中作为的。示例 1:输入:输出:6解释:整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。
2024-05-21 23:07:51
329
原创 Java的JDBC编程
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当 前数据行,我们只能来操作当前的数据行。连接池在初始化时将创建一定数量的数据库连接,这些连接 是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将 Conncetion连接对象回收。java通过.java源文件编译成.class文件,jvm来解释执行.class(每个.java都对应一个.class),如果.java很多,就将一大堆的.class给打包成压缩包(.jar)
2024-05-21 18:38:43
668
原创 数据库的事务四大特性(ACID)以及详解隔离性以及隔离级别
一、事务相关概念场景:1、事务事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。1、怎样算是一个事务:从第一次执行SQL语句开始到执行commit或者rollback结束。中间不管执行多少SQL语句都是同一个事务内。2、数据库如何实现事务的服务端有日志记录功能,新操作是记录到日志中的,commit会将日志中的记录刷到硬盘中,rollback就是将日志中的记录删除掉了2、事务的本质。
2024-05-21 09:24:06
995
原创 贪心算法每日一题(最大数)
思路:要想组成最大的整数,一种直观的想法是把数值大的数放在高位。于是我们可以比较输入数组的每个元素的最高位,最高位相同的时候比较次高位,以此类推,完成排序,然后把它们拼接起来。这种排序方式对于输入数组 没有相同数字开头 的时候是有效的,例如 [45,56,81,76,123][45, 56, 81, 76, 123][45,56,81,76,123]。种拼接的可能,我们是不是需要先得到 NNN 个数的全排列以后,再选出最大的呢?,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
2024-05-20 23:02:07
382
1
原创 带你通俗易懂进程和线程(小白一学就会)
1)进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程。进程是操作系统进行资源分配的最小单位。2)进程是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。.exe是一个可执行文件(程序),当我们双击这个文件时,这个程序就跑起来,于是系统就形成了一个进程(跑起来的程序就是进程)2、描述进程使用结构体(
2024-05-19 19:27:46
1271
1
原创 面试题:聊聊进程与线程的区别
例子:每个客户来银行办理各自的业务,但他们之间的票据肯定是不想让别人知道的,否则钱不就被其他人取走了么。而上面我们的公司业务中,张三、李四、王五虽然是 不同的执行流,但因为办理的都是一家公司的业务,所以票据是共享着的。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
2024-05-19 19:11:51
187
1
原创 贪心算法每日一题(将数组和减半的最少操作次数)
nums 的和减小了 33 - 14.75 = 18.25 ,减小的部分超过了初始数组和的一半,18.25 >= 33/2 = 16.5。最终数组为 [5, 4.75, 4, 1] ,和为 5 + 4.75 + 4 + 1 = 14.75。具体策略: 每次挑选当前数组中,最大的那个数,然后减半,直到数组的和减少到一半为止。初始 nums 的和为 5 + 19 + 8 + 1 = 33。(注意,在后续操作中你可以对减半过的数继续执行操作)可以证明,无法通过少于 3 个操作使数组和减少至少一半。
2024-05-19 17:46:12
217
1
原创 贪心算法之每日一题(柠檬水找零)
你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付。如果你能给每位顾客正确找零,返回。在柠檬水摊上,每一杯柠檬水的售价为。顾客排队购买你的产品,(按账单。每位顾客只买一杯柠檬水,然后向你付。贪心策略:选择10+5。注意,一开始你手头没有任何零钱。20 :10+5或者5+5+5。支付的顺序)一次购买一杯。分析:分为三种情况;
2024-05-18 18:59:03
151
原创 从零开始学习贪心算法(greedy algorithm,又称贪婪算法)
贪心算法适用于一些特定类型的问题,通常要求问题具有贪心选择性质(即每一步的选择都是最优的),以及最优子结构性质(即问题的最优解可以通过子问题的最优解推导得出)。然而,贪心算法不一定能够求解所有问题,有些问题可能需要更复杂的算法来解决。经典的贪心算法问题有找零钱问题、活动选择问题、背包问题中的部分背包等。贪心算法在求解这些问题时,通常能够得到接近最优解的结果,但并不保证一定能够得到全局最优解。总之,贪心算法是一种基于每一步的局部最优选择来求解问题的思想,适用于一些满足贪心选择性质和最优子结构性质的问题。
2024-05-18 18:50:54
327
原创 计算机是如何工作的&多线程
并行:一边干这件事,一边干那件事(真正意义上的同时进行)并发:一会干这件事,一会干那件事(同时只能干一件事)),创建线程只需要关注要处理的任务,使用的是进程创建时申请到的所有资源。我们并不区分是并行还是并发,统一称为并发编程。由于MMU的限制,导致进程之间不能够互相访问内存。为了解决资源消耗问题,提出一个轻量级进程的概念(线程:JAVA中的类。1.继承Thread类。面试题:请你说一下什么是并发,什么是并行?但是:这些申请也释放资源的操作是非常耗时的。处理一个复杂或很大的任务。
2023-06-04 22:50:48
88
原创 类和对象认识
类:描述一类对象所具备的共同属性和行为。(比较抽象的概念)对象:某个类的具体表现,在每个具体的对象中,属性才有了具体的值。在java中定义类时需要用到class关键字//创建类class(定义类的关键字) ClassName{field;//字段(属性)或者成员变量method;//行为或者成员方法(主要说明类具有哪些功能)//定义一个学生类//类名称采用大驼峰定义//成员前写法统一为public//此处写的方法不带static关键字。
2023-05-06 20:22:17
65
原创 分而治之算法
从左右两端的字符开始一层层检查,检查这两个字符是否一样,如果一样则两端的就不用管了,继续向内开始第二次判断,若不一样则直接输出,以此类推,直到i<=len/2结束。其自然的可以用一个递归过程来表示。分治法就是一种找大规模问题与小规模问题关系的方法,是递归设计方法的一种具体策略。小问题:不看首尾两个字符的串。思路:判断一个字符串是否为回文,则我们只需要判断字符长度的一半。将整个问题分解成若干个小问题后分而治之。分治法求解问题的过程是,便于利用递归或循环机制;
2023-05-05 22:02:44
90
原创 【无标题】动态内存分配
1.malloc函数开辟动态内存存储区 void *malloc(unsigned int size)①注意指针的类型为void,它只提供一个纯地址
2022-12-26 17:49:16
55
原创 令我头疼的指向函数的指针
1.输入两个整数,然后让用户选择1或2,选1时调用max函数,输出二者中的大数,选2时调用min函数,输出二者中的小数。后者是错误的,因为其作用是将调用max函数所得到的函数值赋给p,而不是将函数的入口地址赋给p。在定义和使用指向函数的指针变量分不清楚,搞混淆,发现自己对函数的理解不是不够细节和全面。应用:菜单提示输入一个数字,然后根据输入的不同值调用不同的函数,从而实现不同的功能。②上述表示“调用由p指向的函数,实参为a,b。(p=max,即就是指针变量p指向了max函数)①用(*p)代替函数名。
2022-12-24 22:20:49
129
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人