2024年黑马java基础班日志

黑马java基础班日志10 8 1 外卖项目 上手 swagger 新增用户接口引入 mp 实现 复习 mp 整合到 springboot 和使用 导依赖过程解决两个依赖冲突 bug 1 导入 mp 时 xml 中需要两个依赖 mybatis plus boot starter 和 mysql connector java 同时需要删掉 spring boot starter 因为前者已包含会发生冲突 2

大家好,我是讯享网,很高兴认识大家。



10.8

1.外卖项目

  • 上手swagger
  • 新增用户接口引入mp实现
  • 复习mp整合到springboot和使用

导依赖过程解决两个依赖冲突bug:

1.导入mp时xml中需要两个依赖mybatis-plus-boot-starter和mysql-connector-java,同时需要删掉spring-boot-starter,因为前者已包含会发生冲突

2.mybatis-plus-boot-starter和pagehelper的依赖冲突

2.算法

链表算法题*4

3.mysql

  • undolog
  • redolog

4.计算机网络

mac地址和ip地址以及ARP协议

9.29

1.外卖项目

  • 导入资源
  • 熟悉调试
  • nginx代理

saas项目大体跟完,剩余拓展部分.

先做个外卖项目巩固下基础部分,预计花费4天完结

2.算法

红黑树的put和remove

内容相对简单,是各种情况的分类繁琐,后续做个流程图再巩固代码

3.计算机网络---数据链路层

  • 封装成帧
  • 差错检测
  • 可靠传输(3种传输协议)

9.26

1.saas---短链接访问监控

  • pv
  • uv---cookie+redis
  • 地区
  • ip,设备类型...各种监控量

参考视频的质量太差,让人感觉做着很混乱,感觉一刷完之后需要重新更加仔细的二刷了,

一刷先熟悉手感和项目业务,记下重点和可以业务改进的地方

不过对项目的学习感受有了更加深刻的理解,原来只是会看着视频理解业务,现在会往文档和查询学习的方向去靠,毕竟日后文档才是学习和工作中的主体

2.mysql

  • 唯一索引等值查询和范围查询的行级锁退化情况
  • 二级索引等值查询和范围查询的行级锁加锁情况
  • 执行update语句where中无索引锁全表的情况及解决方法

对行级锁的上锁情况有了大概的了解,有点柳暗花明,后续这块还是要再重点复习

3.计算机网络

修正学习方法,改用视频+文档学习的方式,基础薄弱的情况下只学习文档效率有些低

9.25

1.saas

回收站的创建,分页查询,删除和移除

分页查询时需要对gid做查询处理,因为回收站中数据不需要分组,但查询shortlink表需要使用gid,所以先查询出当前用户的所有分组gid,再使用in(g1,g2...)来查询数据

2.mysql

  • 4种表级锁
  • 3种行锁

锁的内容很复杂,二刷图文后再看看视频

3.计算机网络

  • http的优缺点,数据透明带来的三种隐患
  • https对3种数据透明的处理方案
  • GET和POST

9.24

1.saas

  • 短链接跳转业务
  • 短链接的缓存穿透,缓存击穿,缓存预热

2.mysql

  • 索引失效的6种情况
  • 模糊匹配仍然生效的情况
  • count(*)和count(1)的性能比较
  • 事务中可重复读级别下对幻读的处理和无法解决的两种情况
  • 全局锁

3.计算机网络

零零散散的知识

9.23

1.saas

  • 远程调用查询分组数量
  • 修改短链接---涉及分表后的update操作处理

2.mysql---事务

四大特性

  • 三种并发问题
  • 四种隔离级别
  • mvcc版本链
  • 读已提交和可重复读的mvcc实现和库按照区别

9.22

1.saas

  • 分页查询---mp的selectPage接口
  • 模块间调用联调
  • 分组分表
  • 查询分组内数量---使用mp自定义复杂sql语句

9.18

1.saas项目

  • 分布式锁+布隆过滤器解决用户恶意注册(同时只能有一个用户名被注册)
  • 用户数据分库分表
  • 数据库敏感信息加密
  • 用户修改
  • 用户登录---采用hash结构缓存,username作为key,token和用户json作为hash键值
  • 用户退出

涉及到同一个用户名恶意注册,缓存实现用户登录两个业务难点

9.17

1.saas项目

  • result返回类封装
  • 全局异常码定义
  • 全局异常拦截器定义
  • 用户名查询
  • 用户注册,引入布隆过滤器

因为初始接触项目还是手生,在参数接收和请求路径这些基础方面花了些时间,不过接触到了很多新注解和插件,项目开始涉及到缓存穿透

9.16

1.saas项目

  • 了解项目结构
  • 用户模块的查询用户

controller层方法中的参数注解@PathVariable

9.15

1.saas

导入项目,创建项目基础结构

<dependencyManagement>中的依赖爆红---虚假爆红,此处的依赖只是做版本约束,在子模块中导入依赖后才会下载

9.14

1.java微服务

  • es---java批量处理文档
  • ASL---叶子查询,复合查询
  • 排序,分页(深度分页)
  • 高亮显示

es是像mysql一样的一个高搜索性能的数据库,其内容和结构也大致都和mysql一致,感觉是学习了一套es的操作api

2.mysql

回头重新复习前面的20题,感觉sql操作中各种表的拼接和函数的调用很混乱,总之感觉很难,需要重新静下来重新过一遍

3.项目

选定了一个优惠券秒杀项目,复习Git的相关操作,阅读整理各种文档,刚开始起步总是感觉很难.

考虑之后还是基础不牢靠,还是先选择一个基础的项目练手后再操手大项目.

学习的试错率 --感觉学习中对这个概念总是感触很深,每次要开始下一个学习章节的开头,总要花大把的时间去试错反思,再重新开始找适合的课程,总是有益的

9.13

1.java微服务

es---JavaRestClient对索引库和文档的操作

2.mysql

sql50 16-10

9.12

1.java微服务

  • MQ消费者可靠性---失败重试,确认,业务幂等(多次执行业务只造成一次业务影响)
  • 消息延迟方案---死信交换机,插件实现延迟queue

--------------

  • elasticsearch---倒排索引 
  • ik分词器
  • 索引库和文档的crud

2.mysql

sql50题 11-15

9.11

1.java微服务

  • 消息转换器
  • 发送者可靠性保障---重连和确认
  • MQ可靠性---数据持久化,LazyQueue

2.mysql

  • sql50 6-10
  • 事务并发的3中问题
  • 4种隔离级别

9.10

1.java微服务

  • seata的XA和AT模式解决分布式事务
  • 同步/异步消息在微服务项目中的应用
  • RabbitMQ客户端
  • 队列和3种交换机
  • SpringAMPO基于Bean和注解绑定队列和交换机

2.MYSQL

sql50题 1-5

事务四大特性

3.算法

avl树

9.9

1.java微服务

  • mvc拦截器---实现网关到微服务的登录校验,token获取
  • feign拦截器---实现微服务间相互调用的用户token传递
  • nacos微服务配置管理
  • 微服务雪崩问题
  • sentinel的四种雪崩处理方案
  • 分布式事务问题
  • 引入seata 

微服务中的用户登录校验分为三部分,网关入口jwt处理token,网关到微服务,微服务调用微服务,本质都是将用户id存储到请求头中,分别采用网关过滤器,mvc拦截器和feign拦截器来将用户id写入/取出请求头

(微服务内部是在mvc拦截器中将用户id存入ThreadLocal利用UserContext获取)

9.8

1.java

  • 微服务拆分
  • 网关时间
  • 网关过滤器
  • 网关登录校验

一个nacos启动失败的bug

        在docker logs nacos 中查找发现是sql配置文件未读取到的原因,分析得知本机docker的mysql未设置开机自启,导致nacos自启动时配置出错

9.7

1.java

  • 微服务概念
  • 项目拆分实践
  • 远程调用
  • nacos服务注册和发现

9.5

1.数据结构

二叉搜索树remove递归,范围查询

2.操作系统

...1h

3.mysql

主从复制,分表分库的概念

4.算法

验证二叉搜索树(98) ,思考二叉树直径问题(543)

9.4

1.数据结构

二叉搜索树的get,put,前后祖先,remove

2.操作系统

糊里糊涂的网课1.5h

3.mysql

四种日志

4.算法

leetcode 104,226,101二叉树深度,反转二叉树,判断对称

8.7

1.mysql

  • 视图--检查选项,作用
  • 存储过程--语法,3种变量

2.计算机网络

web应用

web缓存中的条件性GET

3.算法

leetcode88,27

8.2

1.redis

2.mysql---索引

  • 概念
  • 结构---b+树,hash
  • 分类---聚集索引,连接索引
  • 操作语法
  • 性能分析工具---执行频率,慢查询日志,profile,explain

3.jvm

  • 启动类,扩展类,应用加载类加载器的详情
  • 双亲委派机制

8.1

1.redis

三种redis的消息队列 list,pubsub,stream

2.mysql

存储引擎,innodb的优点

3.jvm

  • 类的生命周期---初始化
  • 类加载器的分类

7.30

1.redis

异步秒杀

将抢购秒杀券的步骤分割为两个部分分别执行,验证部分由redis进行,生成订单则代开现场采用阻塞队列进行,以提高执行效率

代码实现时开线程获取代理对象执行的步骤出bug,无法解决

2.mysql

多表查询 内外连接,联合查询,子查询

事务 ACID,并发事务问题及隔离级别的解决

7.28

1.jvm

类的生命加载周期 加载 连接

 7.27

1.jvm

  • 字节码文件组成 常量,方法
  • 字节码查看工具 jclasslib arthas

7.25

1.redis---分布式锁

  • redis实现
  • 误删问题-->删除时进行线程匹配
  • jvm导致的误删-->redis执行lua脚本实现原子性

2.mysql

  • dql
  • 四种函数

7.24

1.redis---优惠券秒杀

  • 多线程并发引发的超卖
  • 一人一单及并发安全
  • 分布式锁概念

黑马java基础班日志

7.22

1.redis

  • 优惠券秒杀的基础版本

7.18

1.redis

  • 缓存穿透的逻辑过期实现
  • 缓存工具类的封装
  • 全局id的redis生成

7.17

1.jvm

串池 

  • intern
  • 字符串面试题
  • 串池1.6和1.8的位置(永久代  堆)
  • 串池底层hash表,对bucket的性能调优

2.计算机网络

  • OSI模型详解

7.16

1.jvm-内存结构

(1)堆  定义,内存溢出及诊断(3种工具及gc后仍内存占用高)

(2)方法区  定义(永久代->元空间),组成,内存溢出,常量池

(3)stringTable  和运行时常量池的联系; string的两种创建方式:串池和堆(new string()); 常量字符串和变量字符串的拼接


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的默认格式是,其中 是日期和时间的标准分隔符。虽然数据库中的数据缺少中间的T,但是会进行自动转换封装,如需自定义格式,只需在属性上添加注解注明格式;

        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 采用字母乘权重写了生成方式:

 
讯享网 

乘以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.数据结构  阻塞队列的单锁实现   了解到数据结构能和线程特性结合到一起产生新的数据结构还是蛮震撼的

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.算法

小讯
上一篇 2025-01-01 07:35
下一篇 2024-12-28 21:05

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/6331.html