算法进阶-日记
前言我对算法一直抱有恐惧,这种恐惧来自面试的压力,害怕自己做不出来,但是如果抛开面试不谈,我还是喜欢算法的,算法有一种魔力,是由纯粹的逻辑构成的诗。之前一直是为了面试而刷题,hot100已经刷到就算是一周不睡觉也能很快A出来的程度了,但终究没有入了算法的门,之前也尝试过阅读《算法导论》等等书籍,过于理论化的学习让我提不起兴趣。
果然还是得刷题,在失败中成长。路虽远,行则将至。
灵茶山艾府-题单
每日一题-收获集
对角线遍历对于遍历一个矩阵(m x n)的所有对角线,这里指的是从左上到右下的对角线,除了常规的遍历方式,还有一种更加简洁的方式
理论对于每一条对角线,可以知道其中的 i - j 是一个固定的值。
可以设 k = i - j + n,每一条对角线都对应了一个 k ,最右上对角线(i = 0,j = n - 1)对应的 k 是 1
最左下对角线(i = m - 1, j = 0)对应的 k 是 m + n - 1,可以得到 k 的取值范围是 (1, m + n - 1)
对角线都是从上向下遍历的 也就是 i 会变大,反推公式可以得到 i = k + j - n,j = i - k + n,也就是当i,j的变化是成正比的。当 i 取最小 0,j 取最小 n - k,当 i 取最大 m - 1,j 取最大 m + n - k - 1
当然,不是每条对角线 i 的取值范围都是 (0, m - 1),对于一条对角线,如果 i 超出了其对应的范围,那么 j一定也会越界,所以,可以用 j 的范围来反向限制 i,对于一个矩阵来说,j ...
Design Pattern - 结构型
结构性模式用于解决将对象和类组装成较大的结构,并同时保持结构的灵活和高效。
适配器模式理论适配器模式的主要作用是把原本不兼容的接口,通过适配修改做到统一。
对业务代码做不同接口的兼容,比如中台服务,中台需要把各个业务线的各种类型服务做统一保证,再对外提供接口进行使用。
可以用于对于业务的适配,适配器不只是可以适配接口,还可以适配一些属性信息。
案例
模拟了了三个不不同类型的MQ消息,⽽而在消息体中都有⼀一些必要的字段,⽐比如;⽤用户ID、时间、业务ID,但是每个MQ的字段属性并不不⼀一样。就像⽤用户ID在不不同的MQ⾥里里也有不不同的字段:uId、userId等。
同时还提供了了两个不不同类型的接⼝口,⼀一个⽤用于查询内部订单订单下单数量量,⼀一个⽤用于查询第三⽅方是否⾸首单。
public class RebateInfo { private String userId; // 用户ID private String bizId; // 业务ID private Date bizTime; // 业务时间 private String d ...
JavaScript-学习日记
JavaScript 简介什么是JavaScript ?JavaScript 最初被创建的目的是“使网页更生动”。这种编程语言写出来的程序被称为 脚本 。它们可以被直接写在网页的HTML中,在页面加载的时候自动执行。
脚本被以纯文本的形式提供和执行。它们不需要特殊的准备或编译即可运行
JavaScript有自己的语言规范ECMAScript。
JavaScript 不仅可以在浏览器中执行,也可以在服务端执行,甚至可以在任意搭载了 JavaScript 引擎 的设备中执行。
浏览器中嵌入了 JavaScript 引擎,有时也称作“JavaScript 虚拟机”。
引擎是如何工作的?引擎很复杂,但是基本原理很简单。
引擎(如果是浏览器,则引擎被嵌入在其中)读取(“解析”)脚本。
然后,引擎将脚本转化(“编译”)为机器语言。
然后,机器代码快速地执行。
引擎会对流程中的每个阶段都进行优化。它甚至可以在编译的脚本运行时监视它,分析流经该脚本的数据,并根据获得的信息进一步优化机器代码。
浏览器中的JavaScript 能做什么?现代的 JavaScript 是一种“安全的”编程语言。它不提供 ...
毕业设计
天不遂人意,我本来的毕业设计是尝试自己去做一个数据库。但是在学校导师的安排下,我被分配到一个新的题目。将一个单体项目重构为微服务项目。项目是物联网网关,作为主平台和物联网端的数据过渡。单体项目是gitee上的开源项目iteaj。考虑到项目的复杂性和文档的缺少。我预计花费1个月的时间来完成这次的重构。
计划安排
时间
计划安排
完成情况
2025/3/3 ~ 2025/3/9
理清单体项目的代码逻辑,撰写项目文档
2025/3/10 ~ 2025/3/16
使用DDD完成领域拆分,完成微服务架构设计
2025/3/17 ~ 2025/3/23
完成微服务重构
2025/3/24 ~ 2025/3/30
完成毕业论文的撰写
Design Pattern - 创建者
工厂模式理论工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型
它的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类执行。
简单来说就是为了提高代码结构的拓展性,屏蔽功能类的具体实现逻辑,外部只需要调用。这也是去掉众多ifelse的方式。缺点也很明显,需要实现的类非常多,如何去维护,怎样降低开发成本。
案例public interface ICommodity { void sendCommodity(String uId, String commodityId, String bizId, Map<String, String> extMap) throws Exception;}public class CardCommodityService implements ICommodity { private Logger logger = LoggerFactory.getLogger(CardCommoditySer ...
Hadoop数据体系-基本概念
Hadoop技术概述Hadoop是一种针对大数据处理的被行业广泛使用的关于数据处理挖掘的主流技术。
主要涉及到的技术点是大数据的分布式存储和计算框架
Hadoop的特点
高可靠性:数据存储使用集群部署在不同的机器上。当数据处理请求失败时,Hadoop将自动重新部署计算任务。
高扩展性:Hadoop可以非常容易的对集群中的节点进行拓展。
高效性:Hadoop可以在节点之间动态地移动数据,保证数据处理是多个节点并行执行,同时保证各个节点处理的动态平衡,最大化的提高数据处理的效率
高容错性:Hadoop提供了分布式文件系统HDFS。HDFS可以将文件冗余的保存在多个节点中,当某个节点出错或者宕机,可以读取其他节点的冗余数据,保证程序顺利运行。
低成本:Hadoop是开源的。
基于Java编写:Hadoop是一个基于Java语言开发的框架,因此运行在Linux系统上是非常理想的。Hadoop上的应用程序也可以使用其他语言编写,如C++和Python
Hadoop存储框架—HDFSHDFS是一种旨在普通硬件上有哪些的分布式文件系统。拥有非常优秀的容错能力,支持对应用程序数据的高吞吐量访问,并 ...
秋招小结
从今年的三月份开始准备秋招的,满打满算也有6个月了。从一开始的踌躇满志到如今的疲惫不堪,我这段时间称不上十分努力,但也比平日里要好的多了。
最后的成果。新一线,20+的工资,对于我这个考研半路找工作的同学来说,已经比较满意了。
毕竟吧,要知足长乐。(其实并不满足,因为我知道我可以找到更好的。哈哈)
6个月呀,说长不长,说短也不短,总结一下,还是很有趣的。
截止到我撰写本文的时间,是2024年10月21日,此时秋招基本已经结束,往后的流程多是补录或者是捡漏,不能考虑在内,目前需要准备的是考虑春招以及毕业。
春招和秋招的间隔其实并不远,也就差了2个月左右,大概明年2月中旬,就会陆陆续续开放,我目前打算去找一份实习,这份实习得是大厂的实习,如果找不到,就把时间用在巩固基础上。我的基础其实并不牢靠,六个月的时间往脑子里面硬塞了许多知识点,很多并没有理解透彻,同时,作为即将步入社会的程序员,需要进一步的提升,在各个方面。
其实,抛开社会给予学生的工作压力,单纯的作为一个计算机学生,我对于计算机的各个部分都有探索的欲望。理所当然,在接下来的时间里,我会系统的去学习操作系统、计算机网络、计算机组成原 ...
分布式设计-Redis集群-Mysql集群-Cloud
分布式系统的概念分布式系统是建立在网络之上的软件系统,拥有软件特性,所以分布式系统具有高度内聚性,和透明性。是建设于网络之上的高层软件,而不是硬件。
分布式系统特点分布式系统是多个服务器通过网络互联而构建的松耦合系统,其具备以下特点:
分布式:分布式由多台计算机组成,在地域上是独立分散的,可以分散在一个单位,一个城市,一个国家,或是全球范围内。整个系统的统一功能是分散在多个节点上实现的,因而分布式系统具有数据处理的分布式特性。
自治性:分布式系统各个节点包含自己独有的cpu和内存,具备独立的处理数据能力。一般来说每个节点是对等的,没有主次之分,可以自治的进行任务处理,还可以通过网络传输信息,协同完成任务处理。
并行性:一个大的任务可以按规则划分到多个计算节点上进行独立的子任务支持,体现了并行性。
全局性:分布式系统必须存在一个单一的,全局的通信机制,使得任何一个进程都能和其他进程通信,并且不区分本地通信和远程通信。在一个分布式集群中,往往所有机器具有统一的系统调用能力。
在不同的抽象层次上来说,分布式系统中每一个物理机,虚拟机,docker镜像,独立进程都可以认为是一个节点。
特有 ...
SPI机制
什么是SPI机制SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。
当服务的提供者提供了一种接口的实现之后,需要在classpath下的META-INF/services/目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类。当其他的程序需要这个服务的时候,就可以通过查找这个jar包(一般都是以jar包做依赖)的META-INF/services/中的配置文件,配置文件中有接口的具体实现类名,可以根据这个类名进行加载实例化,就可以使用该服务了。JDK中查找服务的实现的工具类是:java.util.ServiceLoader。