自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 24届北邮硕士暑期实习经验分享

本人暑期,秋招战绩在实验室都算不上优秀,主攻的方向是后端开发,截止目前有四段实习经历,从初创到大厂都待过,最后选了蚂蚁作为自己毕业之后的第一份工作,希望自己能保持对技术的初心继续往前走。

2024-01-04 22:42:02 2323

原创 阅读笔记——《阿里巴巴Java开发规范》

本文记录了阅读《阿里巴巴Java开发规范手册》的阅读笔记,主要记录目前阶段不太熟悉和容易犯错的点:表示类型的名词放在词尾,以提升辨识度;比如startTime, workQueue, nameList等;所有的POJO的属性都需要使用包装类型;使用Map#keySet或entrySet的返回值时,不要添加元素,否则会抛出异常;Arrays.asList同样也不能修改集合;ConcurrentHasMap,key和value都不可以为null,HashMap,key和value都可以为null;在使用阻塞等待

2024-09-02 11:43:27 948

原创 从我邮毕业啦!!!

第二本读的很快,读了7天就读完了,很庆幸地是在蚂蚁实习的时光能够让我很快读懂书中介绍的相关开发规范以及如何在步入职场初期快速提升自己,这也是唯一一本我见过教你如何做一名on-call人员的技术书籍。第四本是一本JS的书籍,在学习后端的同时,我也有学习前端的知识,一直努力着能够做出一个属于自己的产品(目前是先做了几个小APP练手项目)希望熟练掌握JS和TS语言,走TS全栈路线。先后去了山西,西安,青甘大环线,泰国,内蒙五个地方,5月的时候80%的时间都是在外面度过的,总结来说就是累并快乐着。

2024-06-28 21:00:26 4862 9

原创 JS的this关键字详解

学习JS的this关键字往往难以理解和应用,本文详细解读JS中的this关键字,并结合案例给出相应的解释。PS:整理了后端开发的知识网络,欢迎Star!

2024-06-26 21:46:39 1072

原创 零停机部署——特征开关(Feature Toggles)的应用

然而,系统拥有少量长寿命“特征开关”的情况并不常见,这些开关允许生产环境的操作员在系统承受异常高负载时可以优雅降级非重要的系统功能。将决策逻辑点和业务逻辑解耦,需要添加新的功能时只需要添加featureDecision中的方法,在invoiceEmailer中调用featureDecision中的方法。前者通过在运行期间修改开关的值是动态的,而后者切换路由本质上是动态的。如果需要在生产环境中使用更加通用的切换控制机制,最好使用真正的分布式配置系统来构建,并及时清理过时的feature toggle。

2024-06-19 12:10:55 931

原创 以操作系统和Java的视角看“中断“

什么是中断?中断可以归结为一种事件处理机制,通过中断发出一个信号, 用来响应硬件设备请求的一种机制。操作系统收到硬件的中断请求,会打断正在执行的进程,然后调用内核中的中断处理程序来响应请求。中断解决了什么样问题?当CPU需要访问外部设备时,必须不断地进行轮询和等待外部设备的状态, 这种轮询过程极大地浪费资源。中断机制有效地解决了CPU轮询和忙等待以检查外部设备状态所带来的性能损耗问题。注意。

2024-06-09 10:23:04 1187

原创 你真的懂Java延迟初始化吗?

每个线程至少获取一次锁,可能有多个线程同时尝试使用同一个类,而JVM需要确保类的初始化只被执行一次,在初始化完成之前,其他线程需要等待。本文记录安全初始化的几个方式。getInstance的代码路径很短,因此如果getInstance没有被多个线程频繁调用,那么SafeLazyInitialization上不会存在激烈的竞争,从而能提供令人满意的性能。上次学习了并发知识后,给仓库提交了一个final案例,没想到大佬很快就merge了,还给了我contributor,很开心,欢迎学习和Star!

2024-06-06 23:18:08 851

原创 北邮21硕后端知识网络

年度总结-2023(北邮渣硕的自我反省)2023年北邮渣硕的暑期秋招总结2024年1-2月-复盘研三下的焦虑?

2024-06-04 22:44:30 587

原创 一文带你搞懂大事务的前因后果

运行时间(调用远程事务或接口中需要执行的SQL比较多)比较长,长时间未提交的事务可以称之为大事务。

2024-06-01 09:50:22 1107

原创 一文带你搞懂Java-final关键字

上述代码存在并发安全问题,writer和reader同时进行,writer线程进行类的初始化,此时JVM可能会进行指令的重排序,将a,flag等变量的初始化赋值重排序到构造函数之外,导致reader读取的a,flag变量是基础变量的初始值即0和false(指令顺序不一定发生,并且需要特定的硬件和JVM环境)。在构造函数内对一个final修饰的对象的成员域的写入,与随后在构造函数之外把这个被构造的对象的引用赋给一个引用变量,这两个操作是不能被重排序的。编译期常量和非编译期常量。final修饰引用变量。

2024-05-29 12:07:46 879

原创 fucking-java-concurrency解读

Java内存模型要求,变量的读取和写入都必须是原子操作,但是对于非volatile类型的double和long变量,JVM将允许64位的读写操作分解为两个32位的读写操作。当读取一个非volatile类型的long变量的时候,如果对该变量的读写在不同的线程中,那么很有可能读取到某个值的高32位和另一个值的低32位。本文就给出的案例代码给出自己的理解。如下代码,主线程改变task的state1和state2的值,并保持两倍关系,子线程读取state1和state2的值,会发现和主线程写入值关系不相同。

2024-05-22 20:23:36 1064

原创 一文带你搞懂Spring事务

默认情况下,事务只有遇到运行异常(RuntimeException的子类)时才会回滚,Error也会导致事务回滚,但是,在遇到检查型(Checked)默认事务级别Propagation.REQUIRED,aMethod和bMethod属于同一个事务,只要其中一个方法回滚,整个事务均回滚。服务器的sql语句都会在一个单独的事务中进行处理,执行结束后会自动提交事务,并开启一个新的事务。对于只读读取数据查询的事务,可以指定事务类型为readonly,即只读事务。当方法存在事务时,子方法加入在嵌套事务执行。

2024-05-20 22:20:42 629

原创 关系型数据库设计——《六大范式》

一个表至少需要三个独立的字段才会出现多值依赖问题,指表中的字段之间存在多个一对多的关系,也就是一个字段的具体值会由多个字段来决定。表中的所有列,其数据都必须依赖于主键,也就是一张表只存储同一类型的数据,不能有任何一列数据与主键没有关系。在第四范式的基础上,进一步消除表中的连接依赖,直到表中的连接依赖都是主键所蕴含的。简单理解为A-B-C可以拆分为A-B,A-C,B-C三个关系时,则不符合第五范式。这样拆分之后每张表中的id字段作为主键,其他字段都依赖这个主键。为了确保原子性,存储的数据列具备不可再分性。

2024-05-20 21:22:30 806

原创 阅读笔记——《代码整洁之道》ch4

多余的注释并不能比代码本身提供更多A的信息。没有证明代码的意义,也没有给出代码的意图或逻辑。为只做一件事的短函数选个好名字,通常要比写函数头注释要好。所谓每个函数都要有Javadoc或每个变量都要有注释的规矩全然是愚蠢可笑的。注释是写代码永远避开不了的话题,需要知道什么是好的,必要的注释。任何迫使读者查看其他模块的注释,都没能与读者沟通好,不值所费。警告其他程序员会出现某种后果的注释也是有用的。别在本地注释的上下文环境中给出系统级的信息。唯一真正好的注释是你想办法不去写的注释。可以改成以下没有注释的版本。

2024-05-16 21:55:18 294

原创 阅读笔记——《代码整洁之道》ch3

上述代码如果只看函数名称大概率是不知道会初始化session的,应将函数名称修改为checkPasswordAndInitialSession();如果switch如果只是出现一次,用于创建多态对象,而且隐藏在某个继承关系中,在系统其他部分看不到,就还能容忍。算法在函数体中重复了4次,修改时则需要重新修改4个地方,同时也会增加4次放过错误的可能性。上述函数在函数体中修改了pageText的值,结果往往会让人费解。最理想的参数数量是零,其次是一,再次是二,尽量避免三。使用标识参数,则本函数不止做一件事情。

2024-05-15 23:50:56 305

原创 阅读笔记——《代码整洁之道》ch2

另一种解释为把单个参数放到群集(collection)中则不应该使用add,可以使用insert或append之类词来命名才对。类名和对象名应该是名词或名词短语,如Customer,WikiPage,Account,避免使用Manager,Processor,Data或Info这样的类名。给每个抽象概念选一个词,使用fetch,retrieve和get来给多个类中的同种方法命名。方法名应当是动词或动词短语,如postPayment,deletePage或save。别给名称添加不必要的语境。

2024-05-15 23:11:22 517 2

原创 和大佬的畅谈缓解了我研三的焦虑?

豆瓣评分9.8分的程序员神书,几乎每个人都强烈推荐过这本书,但是其实我相信大部分人都是略读了一下,从去年11月份开始读,期间也为了读懂第三章去补了汇编语言的部分,看完之后感觉会对整个计算机系统每一个部分会有更加深入的理解,但说白了是一本锻炼内功的书籍,花太多时间去死啃个人感觉不是很值,读完全书后后看第一章会有醍醐灌顶的感觉,后续会做第一章的知识碎片博客。学前端也不是一时兴起,一直想要做自己的产品,没有设计和前端是远远不够的,但是一个人的精力是有限的,我只能怪自己醒悟的太晚了,为什么没有早早地开始。

2024-05-06 23:37:56 834

原创 MySQL行级锁——技术深度+1

命中了两个临键区(-∞,3]和(3,5], 第一个临键区不会退化,所以会加上一个上界=3的临键锁,对于第二个临键区,查询条件中不包含5,所有退化为间隔锁(3,5)本文是对MySQL行级锁的学习,MySQL一直停留在会用的阶段,需要弄清楚锁和事务的原理并DEBUG查看。由于id=7会落在(6,9]这个区间,但是查询条件没有9,因此退化为间隔锁,锁的范围为(6,9)由于上边界索引key值不存在的时候,锁为临键锁,锁的范围为(9, +∞) LOCK_DATA=行级锁并非是将锁加到记录上,而是加到了索引上。

2024-04-18 22:35:31 1100

原创 MySQL表级锁——技术深度+1

SQLType兼容性与SHARED_READ和SHARED_WRITE兼容,与EXCLUSIVE互斥与SHARED_READ和SHARED_WRITE兼容,与EXCLUSIVE互斥DDLEXCLUSIVESHARED_READ_ONLY与SHARED_READ兼容,与SHARED_WRITE互斥;SHARED_NO_READ_WRITE与SHARED_READ_ONLY 和SHARED_WRITE都互斥与所有MDL锁互斥。Lock TypeIS意向共享锁与表读锁兼容,与写锁是排斥的。

2024-04-18 15:54:59 1155

原创 重构——IdGenerator重构分析过程

对于函数返回NULL还是异常,要看获取不到数据是不是正常行为,如果获取主机hostname失败之后会影响后续逻辑的处理,并不是程序期望的,所以是一种异常行为。注释 = 做什么,为什么,怎么做,怎么用,对一些边界条件,特殊情况进行说明,以及对函数输入,输出,异常进行说明。对于命名三,生成的ID是一个随机ID,不是递增有序的,命名为RandomIdGenerator是比较合理的,即使内部生成算法有所改动,不需要改动命名。写单元测试的时候,测试对象是函数定义的功能,而非具体的实现逻辑。如果对于业务能够接受。

2024-04-12 00:32:29 981 2

原创 知识碎片——CR代码的check_list

CR代码往往需要从代码和功能的角度去分析,这段代码优秀与否,以下check_list参考《设计模式之美》的内容。设计模式实战Repo,欢迎Star!

2024-04-08 23:59:38 282

原创 OAuth2.0客户端和服务端Java实现

本部分将开发过程中遇到的难点记录下来,具体源码参考此repo 👍。

2024-04-08 15:06:44 2779

原创 知识碎片-docker初始化db,自动导入SQL

的README的时候,希望用户能快速部署繁琐的环境依赖,于是写了docker-compose来方便部署,但希望可以一键初始化db,而不是部署mysql之后再手动导入表结构和测试数据。

2024-03-30 11:31:11 382

原创 K8s-网络原理-下篇

如果客户端通过Node2访问Service,则有可能负载到Node1上的endpoint提供服务,则如果不做SNAT则返回的地址为Node1,会导致client接收包失败(client请求的是Node2,响应是Node1)。这条规则设置在 POSTROUTING 检查点,也就是说,它给即将离开这台主机的 IP 包,进行了一次 SNAT 操作,将这个 IP 包的源地址替换成了这台宿主机上的 CNI 网桥地址,或者宿主机本身的 IP 地址。在K8s中,Service和Pod都会被分配对应的DNS记录。

2024-03-25 22:44:16 1180

原创 【转正实习】算法工程师-搜索推荐

支付宝,作为全球领先的数字支付平台之一,我们的用户技术部不仅肩负着为亿万用户提供卓越服务的使命,同时也是创新的前沿阵地。位于成都的创新孵化中心,是我们推出游戏中心、阅读中心等创新业务的摇篮。技术先锋:参与并负责支付宝创新产品内容的各类算法,包括个性化推荐系统、内容生态构建、内容理解、用户理解等核心算法能力;创新引领:参与内部创业,AI助力业务增长,打造千万级用户喜爱的产品,感受前所未有的成就感。面向2024年11月1日至2025年10月31日期间毕业的海内外院校的2025届毕业生。

2024-03-25 15:00:22 250

原创 知识碎片-Java编程思想-接口篇

在给定的代码中,可以使用 twist::execute 是因为 twist 是一个实现了 Operation 接口的匿名内部类的实例。当有一个函数式接口(只有一个抽象方法的接口)时,可以使用 Lambda 表达式或方法引用来代替实现该接口的匿名内部类。从类设计开始,如果很明显接口是必要的,那么就重构。任何抽象都应该由真正的需求来驱动。接口应该是酒必要时用来重构的东西,而不是在任何地方都多加一个间接层级,进而带来额外的复杂性。本文是 OnJava 接口部分的学习笔记。结论 “优先使用类而不是接口”。

2024-03-22 22:43:54 407

原创 K8s-网络原理-中篇

考虑到宿主机数量成百上千。由于 Calico 没有使用 CNI 的网桥模式,因此 Calico 的 CNI 插件还需要在宿主机上为每一个容器的 Veth Pair 设备配置一条路由规则,用于接收传入的 IP 包。但是随着节点 N 的增加,这些连接的数量就会以。Route Reflector 模式会指定一个或者几个专门的节点,来负责跟所有节点建立 BGP 连接,从而学习全局的路由规则。host-gw 模式能够正常工作的核心,在于 IP 包在封装成帧发送出去,会使用路由表中的下一跳来设置目的 MAC 地址。

2024-03-21 23:54:50 1283

原创 K8s-网络原理-上篇

VXLAN 本质上是一种隧道封装技术,它使用 TCP/IP 协议栈的惯用手法“封装/解封装技术”,将 L2 的以太网帧(Ethernet frames)封装成 L4 的 UDP 数据报,然后在 L3 的网络中传输,效果就像 L2 的以太网帧在一个广播域中传输一样,不再受数据中心传输的限制。docker0处理转发的过程继续扮演二层交换机的角色。此时,docker0网桥根据数据包的目的MAC地址,在它的CAM表里查到对应的端口为veth42730c,然后把数据包发往该端口,以下是该过程的原理图。

2024-03-19 16:45:16 1348

原创 JS-闭包

nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量.其次,nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,闭包让开发者可以从内部函数访问外部函数的作用域.闭包会随着函数的创建而被同时创建. 允许将函数与其所操作的某些数据(环境)关联起来.创建了一个立即执行的匿名函数体,包含了两个私有变量和方法,同时创建多个实例,闭包之间互不影响.所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作.

2024-03-17 10:35:00 352

原创 2024年1-2月-复盘

对于阅读书籍的感悟,很多经典书籍读一遍肯定是不够的,很多知识需要反复阅读,不要想着一下子就学完所有的知识,很多知识需要慢慢体会。凤凰架构和DDIA在入职前最好再读一遍。昨晚无意中看到了自己24年的目标和计划,目前已经过去3个月了,想的是以后每2个月进行一次复盘,复盘一下这2个月自己的收获和不足。最近春招也渐渐开始了,也没有去关注了。最近只想享受一下静下心来学习技术的生活,想做自己一直想做的事情。,自己也有一个梦想就是成为一名独立开发者,做一个数字游民。所以最近会学学JS和移动端的技术栈,做一做Demo。

2024-03-14 11:08:45 346

原创 K8s-CRD实战

CRDCRD的全称是CustomResourceDefinition,是Kubernetes为提高可扩展性,让开发者去自定义资源(如Deployment,StatefulSet等)的一种方法.Controllercontroller是由controller-manager进行管理,通过API Server提供的接口实时监控整个集群的每一个资源对象的当前状态,当状态发生变化时,会尝试通过CRUD操作将系统状态修复到"期望状态".整理架构图组件解释Informer即自带缓存和索引机制,可以触发

2024-03-13 16:53:44 711

原创 K8s-MySQL主从集群

该案例代码均可从获取,欢迎Star!

2024-03-08 09:57:30 683

原创 K8s-xtrabackup实战

案例代码可以从获取,欢迎Star!

2024-03-07 22:22:18 523

原创 深入剖析k8s-控制器思想

控制器都遵循K8s的项目中一个通用的编排模式——控制循环上述流程称为:控制循环。

2024-03-01 11:04:51 605

原创 深入剖析k8s-Pod篇

在k8s项目中,Pod的实现需要使用一个中间容器——Infra容器,该容器永远是第一个被创建的容器,用户定义的其他容器则通过Join Network Namespace的方式与Infra容器关联在一起。是一种特殊的Secret对象,每一个Pod都已经自动声明了一个类型是Secret、名为default-token-xxxx的Volume,然后自动挂载在每一个容器的一个固定目录上。这个Pod里的容器要共享PID Namespace,Pod就是要让其中的容器尽可能多地共享Linux Namespace。

2024-03-01 10:27:21 1255

原创 汇编语言-dosbox环境配置

阅读《深入理解计算机系统》第三章时,涉及到汇编语言部分不是很熟悉,故开始阅读《汇编语言》。本文介绍mac环境配置dosbox环境。深入理解计算机系统 -

2024-02-28 23:08:42 401

原创 MQ最终一致性理论与实践

分布式事务无论是2PC&3PC还是TCC,基本都遵守XA协议的思想,但全局事务方案并发性较差;最终一致性方案指的是将最有可能出错的业务以本地事务的方式完成后,采用不断重试的方式(不限于消息系统)来促使同一个分布式事务中的其他关联业务全部完成,不遵从XA协议。

2024-02-20 23:04:09 1394

原创 知识碎片-C语言字符指针

pmessage是一个指针,其初值指向一个字符串常量,如果试图修改字符串的内容,结果是没有定义的。// 定义一个数组// 定义一个指针char *p[] 其中p是数组变量,不能使用p++来获取数组的下一个值,而printlines函数中通过值传递,可以改变lineptr的值。

2024-02-15 00:14:34 183

原创 知识碎片-SpringBoot统一返回结果和捕获异常

ExceptionHandler(value = BizException.class) 捕获自定义异常。ResponseResultBodyAdvice类。统一结果类ResultResponse。定义新注解ResponseResult。

2024-02-14 21:06:20 303

原创 知识碎片-mvn install时不需要mybatis-generator重新生成代码

每一次项目编译的时候,Mybatis-Plus会重新生成代码,导致手动添加的@Mapper和@Data等注解失效。在phase标签修改为deploy阶段或选择不覆盖已经存在的文件。

2024-02-14 20:41:51 193

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除