7.2
1.数据结构
huffman树的结构实现及其编码解码
7.1
复习jsp考试
1.redis
解决两个bug
2.计算机网络
- 报文交换,分组交换
- 计算机网络性能
3.算法
leetcode322最少硬币的贪心解法(非正解)
花费4h处理两个bug:
1.使用SpringBootTest测试时发现没有运行按钮,逐步测试后发现是idea自动导包为juint4的test包,与项目的5不兼容,重新导包后解决.
2.spring项目没有图标和各种应有的配置,查阅后发现是社区版功能极少,于是重新安装了idea企业版并破解,然后发现项目启动jdk报错,试过所有方法都无解,最后似乎是因为删除了PATH中社区版的环境变量才正常运行
都是因为idea的更换所导致,果然没有这么容易,但idea重新安装时会自动删除旧版本并继承其中的数据,但今天的情况是我在安装好之前先自行删除了社区版,然后新版安装是删除了原来的卡顿版本,所以社区版可能会有一些残留问题
6.30
1.数据结构
贪心算法
2.redis
缓存穿透的逻辑过期解决
3.计算机网络
- 网络协议概念
- 网络组成结构
- 数据交换的电路交换
4.算法
leetcode518 零钱兑换的暴力递归解法
idea突然变得卡顿,重新安装了2023.1版本,据说更稳定流畅一些,下载初体验确实如此
6.28
复习数据结构考试
6.24
1.数据结构
1)图
- 图的kruskal算法(利用并查集)
- 图的并查集(结构,find和union方法及其优化)
2)排序
- shell排序(基于插入排序分组以减少调换次数,O(n*log n))
- 归并排序的递归与非递归(分:主要是选取每次的合并边界,合:合并有序数组
2.redis
- 缓存的应用
- 缓存穿透及空对象的解决
- 缓存雪崩
- 缓存击穿及互斥锁解决
6.23
1.redis
1)登录模块和拦截器模块
2)mp:query,save
2.数据结构
1)图的prim
3.算法
中缀表达式转后缀(leetcode150)
6.21
1.小项目
完成购物车模块和主页的开发,在开发商家功能的过程中,因为mapper和xml映射文件中的某个bug导致所有的ResultMap失效报错
最后逐步排查后通过,但最终也没能搞清楚是哪个小地方的问题,但可以锁定在mapper文件或者xml中,供参考
但这件事也给我一个启发就是断点编程:在开始某个开发任务前先测试系统是否正常运行,这样后续出bug也好确定查验范围.像这个bug的出现,是在我先删了几个无用servlet后直接写了store的一整套mvc代码后测验dao层时遇到,也是完全没想到是基础mapper的问题,所以在过滤器和其他地方花了很多时间,然后也是恢复到删除前发现项目正常运行以为是删除servlet的问题,最后才从起点处一步一步排查发现bug是mapper处的问题,较大的排查范围很容易被误导到错误的方向.
2.数据结构
1)图的最小生成树的prim算法:类似于迪克斯特拉最短路径算法,每一步找到dist最小的顶点,更新邻居顶点的dist,记录来路顶点
2)复习DFS:递归和非递归(栈),BFS:队列实现
6.13
1.小项目
完成商品详情模块的开发,完成分页展示功能
分页展示功能
1)五要素:List数据,pageSize,totalPage,currentPage,totalcount-->pagesize和currentpage由前端传入
2)pageBean-->其中的totalpage由totalcount和pagesize计算得到
3)Sql语句的limit start,count(start = (currentpage-1)*pagesize)
2.数据结构
复习冒泡,插入,选择排序
6.12
1.java
复习jdbc和mybatis,昨天项目里的参数封装异常采用mapper的xml映射文件中的ResultMap映射解决
2.数据结构
1)图的拓扑排序的dfs实现(栈)
2)求最短路径的算法
6.11
1.数据结构
图的拓扑排序
2.小项目
开始菜单模块的开发,mapper查询封装时会有参数不能成功封装,应该是表名和属性名不对应的原因,明天复习mapper这块的处理方案,学完就忘,一直感觉这块学的挺虚的.
退出登录的逻辑:删除session和cookie,跳转到登录界面.
6.10
1.数据结构
图的java表示和bfs与dfs遍历
6.8
1.redis
session实现登录的逻辑流程
6.7
1.数据结构
b树删除的的case1-4代码实现
2.redis
SpringDataRedis的使用和两种序列化解决方案
6.6
1.数据结构
1)冒泡排序及边界优化,插入排序,选择排序
2)b树 remove 的6种情况
2.小项目
1)自动登录的实现:cookie+filter:勾选自动登录后使用cookie在浏览器记录,filter拦截登录页面获取cookie,如果存有记录则直接转发
2)转发和重定向
保留一个转发的跳转406bug
3.redis
1)基础数据类型的命令行操作
2)jedis和线程池的使用
6.3
1.数据结构:
2.小项目
继昨天:
3.多servlet处理:
多个servlet类的优化都是同样的获取参数利用反射调用方法,因此将反射调用方法抽取为BaseServlet类,这样子类servlet中就只保留其对应的业务方法
4.返回值集中处理
将子类方法的返回值类型设为string,在BaseServlet中集中处理返回值:获取到参数后如果不为null,则判断参数以forward或redirect开头(统一约定),然后在BaseServlet中完乘相应转发,重定向或返回字符串
5.标识符异常处理
BaseServlet中判断获取到的method是否为空,为空则跳转到默认页
6.2
1.数据结构
B树的特性和其特殊的节点类:
1)key和child都需要使用数组来记录
2)有最小度数的属性来限制每个节点key的数量
实现了put方法,B树的特点特点在于添加时会更多的依赖逻辑特性,比如其下一步遍历的子树与key的索引值会有很大的牵连
2.小项目
反省发现自我挣扎做项目的效率太低,很多都是无用的想法或者想法的实现因知识储备量的不足而耗费大量精力,决定先进行课程学习,多汲取一些项目经验.但这些挣扎也并非无益,在看课时发现所讲的某个实现思路自己原先也有考虑,但知识过少无法实现,有柳暗花明之感,这也算成长经验里最重要的思考一环,但这个程度还是很难把握,少则缺少思考,多则过度耗费精力,拉低学习效率
项目学习笔记:
BaseServlet:
1.创建baseservlet的基本框架:通过在一个servlet中调用不同的方法来实现一个servlet处理多种业务逻辑,因此使用service方法,在方法内接收请求路径中的请求参数来判断调用哪个方法:
1)接收请求参数
2)调用业务逻辑
3)响应(转发,重定向,返回json或返回字节数据)
2. 优化:为处理增加一个需求就多写一个判断的冗杂架构,利用路径中的参数和方法同名的特性使用反射来调用方法:
1)获取类的对象
2)获取类的方法
3)执行方法
6.1
1.大项目
完成了导出excel文件的接口,遇到一个很坑的事情是xlsx表中的时间一栏一直是星号,以为是数据转化出了问题,各种倒腾无果后询问学长,发现是excel表格栏宽过窄,自动省略的展现方式...\
书写代码和测试对接口本身所学到的东西:
a.数据库中的DateTime在pojo中使用LocalDataTime进行封装,LocalDataTime的默认格式是yyyy-MM-ddTHH:mm:ss
,其中 T
是日期和时间的标准分隔符。虽然数据库中的数据缺少中间的T,但是会进行自动转换封装,如需自定义格式,只需在属性上添加注解注明格式@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
;
b. 修改订单状态的接口:自定义了一个新的PlanStatusDTO,只封装id和status两个需用属性,在service中接收到dto对象后调用msMapper将其转换为do后再调用basemapper.update即可
c.删除订单的接口参数是List<Long>,切记controller中添加@RequestBody注解来接收参数,参数这块学习完已久,当时也没怎么用到,导致这块卡了很久
2.数据结构
avl树的实现与自平衡旋转:首先定义了获取和更新节点树高,获取平衡因子的工具类方法,然后处理平衡旋转:树的不平衡分为4种情况,ll,lr,rl,rr,针对这4种情况给出了4种旋转方法,然后是实现方法banlance,在方法内部判断不平衡情况并调用相应的方法.然后是put和remove的递归实现(和二叉搜索树的实现大差不差),avl树的不同在于需要对每个节点做更新树高和balance的操作
5.28
1.数据结构
(1)有关hash表:
a.jdk提供的Object类的hashCode方法根据key的值生成hash码,String 采用字母乘权重写了生成方式:
//测试String的hashCode方法
int hash=0;
for (int i = 0; i < s1.length(); i++) {
char c = s1.charAt(i);
// hash=hash*31+c;
hash=(hash<<5)-hash+c;
}
System.out.println(hash);
乘以31是因为质数减少重合概率,变*32-1是为了移位提高效率
b.murmurHash---第二代哈希算法
c.HashMap链表的头插改尾插是为了防止多线程时冲突
d.HashMap采用了高低位按位与来使高位也参与到hashcode的生成中,减少冲突
e.HashMap采用2的n次方作为容量通过按位与取余,扩容按位与拆分链表,高低位异或来提升效率,Hashtable采用11(质数)作为容量可以使得生成的hashcode分散性更好
f.jdk中的HashMap链表过长转为红黑树是为了防止恶意攻击是链表过长影响性能
5.27
1.项目
(1)领域模型:
do:data object,与数据库表中的字段名一一对应,封装数据库初始数据
dto:data transfer object,service层的数据传输对象,用于传递所需属性
query:在进行条件查询时,有以下三种方式:1.传入对应的属性名,但其代码耦合性过高,如需修改或增加属性则需要修改多处,操作繁琐;2,map.其透明性过低,程序员不容易看出其中封装了哪些属性,因此两个参数以上禁用map;3.query查询对象,将查询条件作为属性封装,直接调用即可
vo:view object
(2)前后端数据校验
前端数据校验是用于数据格式等简单校验,不用传输到后端校验后再返回结果,提高效率,用户不用等待过久,提升用户的体验 ;后端则是对数据的精准审核校验
2.数据结构
(1)二叉搜索树的remove方法,非递归和递归实现
(2)hash表的基本crud方法
5.21
1.项目
完成美食系统的数据库设计
使用powerdesginer时生成pdm后及时选择路径保存,第一次用没注意到没有自动保存,导致文件丢失重新补进度花了很多时间,通过设计sql数据库对cdm和pdm熟悉了解
2.数据结构
复习准备考试
5.18
1.项目
绘制业务流程图,了解学习了FastDfs
2.java
通过测试类中虚拟web环境,controller层虚拟Mvc测试其响应状态,响应体(json),响应头
业务层数据测试事务回滚,达成不留痕测试
5.17
1.数据结构
二叉搜索树的实现
leetcode 通过中后,前后序遍历获取二叉树
5.16
1.java国际象棋小项目
stack实现悔棋,两种实现方法,一种记录每一步的棋盘状态,一种记录棋子的移动复原 并且考虑被吃掉棋子的复原
5.15
1.java国际象棋小项目
了解项目架构,使用hashMap代替二维数组实现棋盘
数据结构
2.二叉树的最大深度,最小深度
5.10
部署先验项目
1.安装虚拟机anolis-8.6
新建虚拟机启动后出现operating system not found,重新新建得以解决,配置过程大概做了以下操作:修改运行内存和线程核数,网络nat模式,配置分区创建root用户
2.安装docker
3.安装mysql,redis,minio
解除防火墙,开放端口供外部连接
熟悉掌握了docker的操作指令和安装虚拟机的步骤,以及了解了一些docker相关的bug,比如容器创建后闪退
注:
总体只要按照文档走就好,最容易出问题的地方是很多docker run 命令的 -- 参数 在复制粘贴时丢失了一个 -,导致出问题,日后噢诶之环境出bug应该先检验各种参数连接是否正确
5.6
1.redis今天复习了mp
进入项目实操,完成了通过session实现登录短信验证码的验证,大致分为发送验证码,接收登录信息验证和校验登录状态.通过将生成的验证码存到session中再取出来进行验证.web中session的知识有些遗忘,有必要复习后再巩固理解.
2.mp
实操redis中遇到mp的内容,会偷进行复习,今天复习了mp的实操和基础CRUD,以及条件查询(lamda查询),null值判断(多一个判断参数)和查询投影(处理查询结果的展示)
3.docker
docker的安装和基本命令
5.5
redis五种数据结构和操作命令的学习,然后是Redis由java操作的实现,实操了jadis和SpringDataRedis操作Redis数据.还有SpringDataRedis操作Redis库的两种序列化设置方法
4.25
1.linux
安装xshell和xftp实现远程连接,然后依次学习了Linux系统的关闭重启登录注销命令,用户管理和运行级别,然后了解了一些文件目录的操作指令
还有找回root密码的一系列操作需要留心
4.24
1.数据结构
完成堆的两道算法题
2.springboot
完成运维篇的学习,运维大致分为四部分:项目打包运行,运行属性配置,多环境开发以及日志的使用,多是对项目已经启动后的一些维护工作,像是对不同环境的调换和属性的各级配置
4.23
1.springboot
学习项目运维知识,包括打包和执行,配置文件的格式和优先级,多环境配置的部署
2.数据结构
完成大顶堆的完整实现,堆的三个重要方法:heatify,down,up
3.Linux
vmware和centos的安装,虚拟机的克隆,移动,删除,快照等操作,了解了Linux的目录结构
4.22
1.Java
完成controller表现层复习和使用vue完成前端开发,实现前后端交互,完结springBoot入门案例
4.9
1.数据结构 阻塞队列的单锁实现 了解到数据结构能和线程特性结合到一起产生新的数据结构还是蛮震撼的
2.springboot
入门部分的复习
4.8
1.设计方法:今天学习Springboot的时候联想到了外观模式,之前使用ssm开的时候需要在SpringConfig类上添加Configuration,ComponentScan等许多注解,而每个注解都是为了使当前配置类实现某一个子功能,这不就可以理解为许多的子系统,而没有Facade类来管理入口的话就需要每次配置都要人工一个一个加注解,Springboot中是将各种注解抽取到一个统一注解中(@SpringBootApplication)加到了启动类上,这其实就是一个Facade类入口的使用实例
2.ssm:完成springboot部分,主要是熟悉了一些文件结构的相关操作,下午花了些时间帮被人解决了个bug,大致情况是他在练习注解实现Bean的生命周期方法时方法未能执行,我自己实现了一遍加反复比对二人的代码,又和他不断沟通后,大致解决过程如下:我这边先是发现未打印是因为他在pom依赖中多加了一个注解包的依赖导致未能打印,将注解包删掉后他那边反而报错显示注解不存在了(我这边没问题),我开始认为是spring-framework依赖版本的问题(他是5.2.1.RELEASE,我是5.2.10.RELEASE),换版本后还是没用,我又查了一遍代码发现原来我这里自动导了注解依赖包,查看来源竟然是jdk1.8,这才想起来一开始从gitee clone到 的他的代码就是jdk17的,最终更换jdk得以解决.
之前虽然一直知道之所以很多人使用jdk1.8是因为其稳定这件事,但经历了这个不起眼的因为jdk版本和其他依赖包不兼容性导致的bug之后我也深有体会,对我现在的学习程度来说,这种jar包兼容问题无疑是降维打击,要不是这个例子的代码及其简单,我绝对查不到jdk身上,
不过当学完ssm之后再回头看最开始的spring容器的概念确实有豁然开朗之感,对容器和Bean的理解和使用都感觉更上一层
3.数据结构:堆实现优先队列,了解了大顶堆和小顶堆的实现
4.7
1.ssm:完成高级maven私服的学习,springboot yaml文件的学习,上午解决了昨天配置文件访问pom文件的属性遗留的bug,发现是子包的pom文件中未继承父包导致未能成功获取数据,今天下午连接私服又出bug,查了半天最后发现是idea默认maven路径导致setting配置未生效,发现现在以每天一个bug的出现和次日解决bug的进度稳步推进,bug真是伴随开发始终,
2.数据结构:数组实现优先级队列的两种方式
3.程序设计方法:外观模式:在子系统的入口处定义Facade类来将子系统复杂的属性和内容进行封装,从而简化了外部使用者的调用操作,同时降低子系统之间的耦合性.
4.6
1.ssm完成拦截器部分学习,高级maven学习了分模块开发和一些pom文件的特性,SpringBoot完成入门案例,这里感叹SpringBoot技术确实大大增加了开发的效率,省去了配置常用的框架,这样看来java开发史就是一个不断的由繁到简的过程,开发越来越便捷,不过等框架越来越简洁的时候,这种简化是不是也已经到头了呢,SpringBoot经久不衰想必有一部分原因也是框架整合确实已经饱和,很难在出现进一步简单的框架,所以下一步就是引导人工智能开发吧,人的开发确实已经够简捷了.
启动springboot jar包出了问题,环境变量设置jdk那边的问题,这一块一直没去补全,今天也是花了一些时间彻底把这一块给完善了,也温习了一遍正确的jdk配置,方便以后工作初期的环境初始化吧
在完成Springmvc的部分后,发现后面的高级maven,springboot章节相比之下都是小卡拉米了,之前 查阅资料看到说s平部分因为是学习框架开发会很轻松,现在才有所体会,这才是真正进入框架学习了吧
2.数据结构:实现数组实现双端队列,然后是一道双端队列实现二叉树z型遍历的算法题,最近精力放到了ssm上,抓紧赶java进度参与5月的项目吧
4.5
1.ssm:从头开始实现了一个ssm项目,整合了Mybatsi,Spring和SpringMvc,仍然在请求静态资源的访问拦截处被卡时间,但最终已经解决,然后学习了表现层的数据封装Result和异常处理器(未手动实践),了解了一点拦截器.通过这个整合案例,印证了之前听课后花大把时间手动实践和记录笔记绝对不是无效功,大大加深了对技术的熟练度,也方便查阅,
2.数据结构:两道栈结构的算法题,链表实现双端队列,因为花了大把时间在ssm上,所以数据结构推进较少
4.4
1.数据结构:完成了栈的学习,包括数组和链表实现栈,和栈的一道后序遍历的习题,使用栈的特性设计算法实现中缀表达式遍历转化为后缀表达式
2.ssm:mvc入门,学习了参数的传递和请求与响应,REST实现案例遇到bug阻碍推进
4.3
1.数据结构:学习了环形数组实现队列的三种方法(首尾指针,容量属性,使用时取模---这里有一个超出整数表示的问题,由一些底层数学特性进行解决),完成了一道树的层序遍历的算法题,一开始自己的实现比较冗杂,了解后在两个方面完成优化:程序的循环结构:如果是不断执行一段代码,然后依据执行次数进行if判断的话,那可以将这段程序修改为fori结构,其次是列表的复制和赋值相关,要调用工具包进行复制,不然复制和赋值操作都会导致新的列表和原有列表指向同一片区域,算是重温了列表的一个特性问题
2.ssm:springmvc入门,解决一个导入依赖时的bug,如果是第一遍导错包刷新后一直报错,那应该去maven的jar包目录结构下先去删除已有的目标包文件,然后再去pom文件中重新刷新导入正确的,不然即使修改后也会一直报错.今天的内容学习比较少,在入门案例也遇到bug卡住进度
4.2
1.ssm:AOP开发和Spring事务管理
4.1
1.ssm:完成注解开发Bean内容的学习,在实现整合MyBatis的案例时理解和修改bug花了很久时间,最后调试发现问题是在占位符传参时多打了一个字母,但也学到了一些MySQL的相关bug,这个案例还是废了很大的力气,反复写了很久才能实现.让人想起上一次这样被整了很久还是MyBatis的入门案例,但不同的是这次的心态确实不一样了,明白自己只是第一次不熟练,而且这个问题最终都会被解决并且成为以后一个简单的实现,抱着这种心态倒也是沉住气查改了很久,这也是程序员磨炼的心性吧,在经历越来越多的bug之后,这种平和之心也会越来越稳
2.处理Java文件结构的bug问题,每次创建项目包或文件的位置都会有bug,今天花了很久的时间调试,发现是在创建时idea自动匹配的路径不是当前项目路径,而是上次使用idea打开文件的路径,但也对idea的各种文件结构有了比较透彻的理解,算是填了之前一个一直没解决的坑
3.算法:LeetCode88,环形哨兵链表实现队列
3.31.2024
1.ssm:Bean,容器和依赖注入的相关知识
2.算法:LeetCode88,完成链表的学习
3.30.2024
1.Vue:
(1)Vue的使用步骤和常用操作
(2)简化js中的DOM操作,和Axios结合实现前后端页面数据交互
2.ssm:
(1)复习IoC容器和Di的使用案例
(2)bean的三个配置内容:基础配置,别名,作用范围
3.算法
链表算法练习
3.29.2024
- filer设置网页访问权限练习
- Ajax实现用户名实时检测练习Ajax实现注册用户名检测实时显示-CSDN博客
https://blog.csdn.net/fengdongnan/article/details/137151545?spm=1001.2014.3001.5501
- Axios和Json替代jsp实现前后端数据交互的练习