小牛

小牛

转行🐕
知识星球
广东省广州市
后端
2018
广东海洋大学
Java后端

该用户非会员

会员专享项目教程/ 答疑等服务

day09 学习: 花半天研究解决了bug(已在云图库项目-用户传图章节下方评论区发表了解决方案)体会到了秃顶的感觉,脑子嗡嗡响。 今日八股: 在浏览器中输入url地址到显示主页的过程? 1. 输入 URL 并解析,包括 URL 解析和缓存判断; 2. DNS 解析,获取 IP 地址(网络层需要); 3. 获取MAC地址(数据链路层需要); 4. 建立 TCP 连接,这个过程包括三次握手; 5. HTTPS 的 TLS 四次握手; 6. 发送 HTTP 请求; 7. 服务器处理请求并返回响应; 8. 浏览器接收响应并开始渲染; 9. 显示主页。 明日计划: 批量抓图章节

day08 学习: 完成云图库项目的用户上传图片及审核功能。 今日八股: MySQL索引的最左前缀匹配原则是什么? 回答: 最左前缀匹配原则指的是在使用联合索引时,MySQL 会根据索引中的字段顺序,从左到右依次匹配查询条件中的字段。如果查询条件与索引中的最左侧字段相匹配,那么 MySQL 就会使用索引来过滤数据,这样可以提高查询效率。最左匹配原则会一直向右匹配,直到遇到范围查询(如 >、<)为止。对于 >=、<=、BETWEEN 以及前缀匹配 LIKE 的范围查询,不会停止匹配。 原理: 索引的底层是一颗 B+ 树,那么联合索引当然还是一颗 B+ 树,只不过联合索引的键值数量不是一个,而是多个。构建一颗 B+ 树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建 B+ 树。 关于联合索引: 1. 以 index(a,b,c) 为例建立这样的索引相当于建立了索引 a、ab、abc 三个索引。一个索引顶三个索引当然是好事,毕竟每多一个索引,都会增加写操作的开销和磁盘空间的开销。 2. 在设计联合索引的时候要把最常用的放在最左边。 明日计划: 学习云图库项目的URL导入图片和批量抓取和创建图片。

day07 学习: 云图库项目改bug,管理员用户刷新页面正常,普通用户刷新页面会失去用户登录态,调试发现是获取登录态接口加了管理员权限注解。 求职: 投了两家简历,没有后续消息。 今日八股: JDK 1.7 和 JDK 1.8 的 ConcurrentHashMap 实现有什么不同? 1. JDK1.7 concurrentHashmap 采用的是分段锁,即每个 segment 是独立的,可以并发访问不同的 segment,默认是16个 segment ,所以最多有 16 个线程可以并发执行。 2. JDK1.8 移除了 segent ,锁的粒度变得更加细化,锁只在链表或红黑树的节点级别上进行。通过 CAS 进行插入操作,只有在更新链表或红黑树时才使用 synchronized ,并且只锁住链表或树的头节点,进一步减少了锁的竞争,并发度大大增加。 3. JDK 1.7 concurrentHashmap 只使用了数组+链表的结构,而 JDK1.8 和 HashMap 一样引入了红黑树。除此之外,还有扩容的区别以及 size 方法的计算也不一样。 明日计划: 继续云图库用户传图章节审核和导入模块。

day06 乱七八糟东学西学忘记时间打卡了┗|`O′|┛ ~~ 想了解一下前端debug,补了一下js的知识,看着看着又看到js逆向......项目没学习多少一天就过去了。 今日八股: HashMap 底层原理(jdk1.8)? HashMap 底层是数组和链表,HashMap 通过 key 的 hashcode 经过 hash 函数处理过后得到 hash 值,然后通过 (数组长度 - 1) & hash 判断当前元素存放的位置,如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树。 hash 函数 (h = key.hashCode()) ^ (h >>> 16) 可以将 hashcode 高位和低位的值进行混合做异或运算,这样低位的信息中加入了高位的信息,高位的信息就被变相地保留了下来,那么生成的 hash 值的随机性会增大,减少了 hash 碰撞。 明日计划: 继续学习用户传图章节。

day05 在图片模块的图片展示的扩展思路中,提到了瀑布流和游标查询,都是没学习过的技术。 瀑布流 瀑布流又称瀑布流式布局,是比较流行的一种网站页面布局只方式。即多行等宽元素排列,后面的元素依次添加到其后,等宽不等高,根据图片原比例缩放直至宽度达到我们的要求,依次按照规则放入指定位置。每次加载图片时,会需要判断哪一列的图片累计的高度最小,那么下一张图片就放在哪一列,即瀑布流算法去判断图片的确定位置。 游标查询 对大量数据进行处理时,为防止内存泄漏情况发生,可以采用游标方式进行数据查询处理。这种处理方式比常规查询要快很多。当查询百万级的数据的时候,还可以使用游标方式进行数据查询处理,不仅可以节省内存的消耗,而且还不需要一次性取出所有数据,可以进行逐条处理或逐条取出部分批量处理。一次查询指定 fetchSize 的数据,直到把数据全部处理完。 明日计划: 云图库的用户传图功能实现。

day04 今天去扫墓了,暂停学习一天。 今日八股: 联合索引的失效场景? 以下 6 种会发生索引失效的情况: 1.当我们使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx%这两种方式都会造成索引失效; 2.当我们在查询条件中对索引列使用函数,就会导致索引失效。 3.当我们在查询条件中对索引列进行表达式计算时。 4.MySQL 在遇到字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较。如果字符串是索引列,而条件语句中的输入参数是数字的话,那么索引列会发生隐式类型转换,由于隐式类型转换是通过 CAST 函数实现的,等同于对索引列使用了函数,所以就会导致索引失效。 5.联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效。 6.在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。 明日计划: 继续完成云图库的图片模块前后端

day03 学习: 云图库项目的图片模块学习中,发现标签分类并没设置到搜索条件中,原来是方法参数忘记改了。这两天的一些学习中由于一些低级错误导致浪费很多时间,从中也看出自身的debug技能有点不熟练,而前端的debug更是一片空白。😵 今日八股: 为什么要三次握手?二次握手或者四次握手会怎么样? 三次握手: 1. 三次握手确保双方都能发送和接收数据: (网上看的回答有些抽象,下面是对第一点的个人理解) ● 第一次握手,服务器可以确认客户端的发送能力; ● 第二次握手,客户端可以确认服务器的发送能力和接收能力; ● 第三次握手,服务器可以确认客户端的接收能力。 2. 防止旧的连接请求误导双方:通过三次握手,双方都能确认对方的状态是最新的,有效避免了网络中的旧的、延迟的SYN包造成的错误连接。 3. 防止重复数据包干扰:三次握手确保双方都能有效处理重复的数据包,并建立一个唯一的连接。 二次握手会导致 1. 旧的重复连接请求:旧的 SYN 包在网络中延迟传输,服务器可能误认为是新的连接请求,发送 SYN-ACK 包,但客户端不知道这个连接,可能导致连接建立异常 2. 无法确认客户端的接收能力:服务器在发送 SYN-ACK 包后,不知道客户端是否已成功收到,如果客户端未收到,服务器会一直等待 ACK 包,导致资源浪费。 四次握手会带来额外的开销和复杂性,增加连接建立的延迟。 明日计划: 争取完成图片模块的前后端。

day02 学习: 智能云图库项目:跟着视频教程文字教程写,调试接口时发现图片模块的接口都404,用户模块正常,问了AI也得不到解决方法,原来是把@RestController注解写成@Controller了......浪费了一个小时,被自己无语到了。 今日面试题 SpringBoot的启动流程? 1. 首先,SpringBoot会读取配置文件与启动类,配置文件指定了项目的各种配置信息,启动类是应用程序的入口。 2. 然后,SpringBoot会使用Spring框架初始化Spring容器,包含创建bean实例、依赖注入等操作。 3. 接着,SpringBoot会开启自动配置功能,扫描项目中的类,如果这些类中有@Configuration注解,SpringBoot将会读取这个类中被@Bean注解标记的方法去生成Bean实例并注入到Spring容器中。 4. 在完成了自动配置后,SpringBoot会根据配置文件信息自动创建Web容器,比如Tomcat或Jetty,并将Spring容器注册到Web容器中,使得SpringBoot应用程序可以直接以Web应用程序的形式运行。 5. 最后,SpringBoot会启动应用程序本身,它会根据之前的启动步骤创建好的 Spring 容器以及Web服务器,启动相应的线程进行服务处理。 计划: 明天继续搞图片模块。

day01 才看到打卡活动 https://www.codefather.cn/essay/1906959769362472962,极限参与。 由于目前处于离职状态,每天就是学习看剧和打游戏...... 既然打卡了,每天也刷一道面试题吧 学习: 在做智能云图库项目,把用户模块过了一遍,由于做过了用户中心,速度比较快。 每日面试题:Java 中的参数传递是按值还是按引用? 在 java 中,参数传递只有按值传递(地址也是值),不论是基本类型还是引用类型。 基本数据类型(如int, char, boolean等):传递的是值的副本,即基本类型的数值本身,因此,对方法参数的任何修改面不会影响原始变量。 引用数据类型(如对象引用):传递的是引用的副本,即对象引用的内存地址,因此,方法内可以通过引用修改对象的属性,但不能改变引用本身,使其指向另一个对象。

下载 APP