- 博客(84)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 今日头条算法及技术架构分析
今日头条算法及技术架构分析 由于好奇,所以在网上搜索了大量的今日头条算法及技术架构文章,最后想进行一个总结。 下面主要介绍今日头条推荐系统概览以及内容分析、用户标签、评估分析,内容安全等原理。一、今日头条推荐算法原理及详解1.系统概念 推荐系统,如果用形式化的方式去描述实际上是拟合一个用户对内容满意度的函数,这个函数需要输入三个维度的变量。 推荐系统,如果用...
2018-11-25 16:10:13
14541
5
原创 Netty代码阅读
结合ByteBuf类上的注释,对它进行一个总结。ByteBuf是底层byte数组或者java NIO Buffer的一个视图,它维护了两个指针,分别是读指针(readerIndex)和写指针(writerIndex),这两个指针分别记录读取和写入数据的位置。| | | |这两个指针将对应byte数组分成了三个区域。readable bytes区域是实际存储数据的区域,writable bytes是需要填充的未定义区域,discardable bytes区域包含的是已经被读操作获取了的数据。
2024-08-25 15:54:01
530
原创 Netty基础知识
Netty的架构由三部分组成——buffer、channel、event model,其他高级特性都是在这三个核心组件上构建的。
2024-08-24 12:48:54
667
原创 Jenkins基础知识
Jenkins可以运行插件来支持构建、部署和自动化任何项目。pipeline由一系列插件组成,它可以在Jenkins中实现并整合持续交付。可以使用Jenkinsfile或者UI界面定义一个pipeline。Blue Ocean提供pipeline的可视化。对于持续集成pipeline,提供精细的可视化。pipeline编辑器。个性化。适应团队中每个人的角色。非常精确。用户提出的要求,可以很快的被满足。对于分支和pull请求,提供原生的整合。
2024-08-21 08:46:16
953
原创 Goland使用delve进行远程调试
通过本文的设置,进行远程调试的时候只需要点击启动运行按钮,然后再点击debug按钮,就可以进行远程调试了,比网上大多数的教程都要便捷和方面,可以提高调试的效率和体验。深刻的体会到了“工欲善其事必先利其器”,对goland的使用又有了进一步的了解。
2024-08-14 15:48:05
413
原创 使用gitea私有仓库作为依赖
由于公司团队使用gitea搭建了git私有仓库,在开发Go程序的时候会有一些公共代码,比如插件和主程序之间要共享接口和数据结构,所以就需要在gitea私有仓库中创建依赖仓库,然后其他仓库引用这个私有仓库作为依赖。因为模块名称必须和下载路径(gitea.com/zzg/DriverCommonInterface.git)保持一致,所以在DriverCommonInterface工程的go.mod文件中定义的模块名称为。协议了,这点很重要,因为内部gitea私有仓库是走的。所以在git的配置文件(
2024-08-05 20:37:44
498
原创 如何建立自己的技术知识体系
这一份知识体系建立文章并不是要给出要学习的知识点,而是从比较宏观的层面描述如何建立相应的知识体系,就相当于建立一个骨架,有了骨架后,还离不开平时的积累来进行丰富知识体系。除了知识体系的建立,还要建立自己的能力体系。知识体系是为能力体系进行服务的,最终的目标是建立和工作岗位相匹配的能力体系。
2024-08-04 22:03:57
312
原创 如何做好软件架构设计
本文总结的四个部分就是从需求到落地实施的四个步骤,把这些步骤做好了才能保证整个系统的成功。明确需求是为了确定好整个系统的目标和意义,确定好架构模式是为了讲需求进行宏观拆解,将需求拆解到服务是具体拆解,是为明确各个服务的职责,服务设计就是为了能指导软件代码的开发工作。上面这四个部分也是对着应作为一个软件从业人员需要掌握得四个方面知识,分别是沟通能力、软件架构知识、需求理解能力、软件开发知识。自己在这四个方面也还欠缺得很多。
2024-07-29 16:02:29
318
原创 Consul与CoreDNS的对比
CoreDNS官网:https://coredns.io/CoreDNS是一个DNS(域名解析)服务器,以插件的形式被提供。可以处理服务发现。在K8S中安装了CoreDNS后,每个服务就可以使用域名的方式调用其他服务。感觉CoreDNS的优点就是专一、简单,适合规模比较小的微服务集群。CoreDNS是使用Go语言开发的。Consul官网:https://www.consul.io/
2024-07-09 21:23:48
376
原创 K8S快速入门
在学习k8s的过程,虽然官网给出的示例教程很简单,但是由于网络和环境的差异,导致实际操作的时候踩了很多坑,下面记录一下自己的操作步骤,方便需要的人参考,也方便以后的自己。参考官网的资料:https://kubernetes.io/docs/tutorials/hello-minikube/
2024-05-07 16:17:58
991
原创 Sentinel基础知识
Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同时提供实时的监控功能。
2023-12-04 22:26:05
1085
原创 MyBatis源码分析
MyBatis是常用的持久层框架,帮助我们减少了很多的访问数据库的代码。这次我们就来看看MyBatis是怎么做到这些的?看看它里面用到了哪些值得我们借鉴的技术。
2023-11-14 15:59:51
170
原创 Raft算法之日志复制
在Leader选举过程中,集群最终会选举出一个Leader节点,而集群中剩余的其他节点将会成为Follower节点。Leader节点除了向Follower节点发送心跳消息,还会处理客户端的请求,并将客户端的更新操作以消息(Append Entries消息)的形式发送到集群中所有的Follower节点。当Follower节点记录收到的这些消息之后,会向Leader节点返回相应的响应消息。当Leader节点在收到半数以上的Follower节点的响应消息之后,会对客户端的请求进行应答。
2023-07-14 14:11:12
1938
原创 Raft算法之Leader选举
Raft 使用心跳(heartbeat)触发Leader选举。当服务器启动时,初始化为Follower。Leader向所有Followers周期性发送heartbeat。如果Follower在选举超时时间内没有收到Leader的heartbeat,就会等待一段随机的时间后发起一次Leader选举。Follower将其当前term加一然后转换为Candidate。它首先给自己投票并且给集群中的其他服务器发送 RequestVote RPC。结果有以下三种情况:1、赢得了多数的选票,成功选举为Leader。
2023-07-04 11:53:26
685
原创 RabbitMQ延迟消息
在项目中遇到了一个需要延迟发送消息的需求,经过一番探索找到了合适的解决方案,并且在本地进行了验证,这篇文章用于记录自己找到的方案,方便以后自己回顾,也方便有需要的人。
2023-02-23 19:55:36
448
1
原创 如何学习一个框架
自己之前写过一篇类似的文章,但是只是将搜集到的资料进行了汇总,现在想一篇有自己思考的文章,方便自己以后查看,也希望对你有用。学习一个框架的整体思路是:由浅入深,从整体到局部。先了解个大概搜相关博客或者介绍视频,去了解这个框架是干什么用的,可以解决什么问题,在什么场景下用。了解这些东西可以建立起对一个框架的整体认知,这三个问题也是我们实际工作中要学习某个框架的原因。简单上手看看例子程序或者单元测试代码,特别不能忽略单元测试代码。最好看下官方的introduction和guide部分的文档,这可是最
2021-07-27 01:28:24
1613
原创 Spring模块概览
Spring模块概览对Spring的所有模块大概了解一下,建立一个整体的认知。1. Spring Boot帮助你快速的构建独立的、生产级别的基于Spring的应用。采用固定方式对待Spring平台和第三方库,以此来尽可能消除Spring应用的配置。特性创建独立的Spring应用。直接内嵌Tomcat、Jetty或者Undertow,不需要部署war包。提供固定的"starter"依赖,减少你的构建配置。尽可能的自动配置Spring和第三方库。提供生产可使用的特性,例如metrics、健康
2021-07-20 01:23:10
520
原创 Java线程池的shutdownnow()方法为什么不能停止运行的任务?
Java线程池的shutdownnow()方法为什么不能停止运行的任务?在工作中到了一个实际问题,明明已经调用了线程池的shutdownnow()方法,但是线程池中任务依然在继续运行。加下来先大概介绍一下问题背景,然后给出原因分析,最后给出这个问题的解决办法。一、问题背景事情是这样的,在一个线程池中运行着一个周期任务task,这个task的run方法中会执行四个子任务,每个子任务中都会有网络操作。 下面简单用代码进行展示一下。public class Task implements R
2020-10-19 08:14:34
4586
2
原创 log4j2 学习(三) 流程跟踪 (Flow Tracing)
先直接上整个流程跟踪知识的思维导图为什么要用流程跟踪?用日志来跟踪应用程序的流程有下面的好处:开发时可以用于调试,而不需要构造一个特殊的运行场景在生产环境中没有调试工具,那么可以用跟踪程序流程的日志诊断问题帮助开发者了解应用程序使用情况进入方法进入方法的时候,可以将entry()和traceEntry()放在方法的第一个语句,这个日志方法的级别时TRACE,对应的marker...
2019-10-26 08:22:19
853
原创 log4j2 学习(一) 概述
一、功能在大型应用中,日志可以帮助定位问题和分析性能,日志组件几乎是大型应用的必备组件。log4j2是log4j的升级版本。log4j2可以完成日志输出。可以定制日志输出格式,指定日志输出的目的是文件、控制台、数据库或其他存储媒介。用log4j输出日志相比较于使用“System.out”的最大优势在于可以指定日志输出级别。二、特点与优势API独立log4j API是一个门面(faca...
2019-10-23 21:36:43
247
原创 命令式编程、声明式编程和函数式编程的理解与思考
命令式、声明式和函数式三种编程范式都各有特色。命令式编程关注的是具体步骤。声明式编程关注的是最后的结果。函数式编程在声明式编程基础上更进一步,将函数作为第一公民。命令式编程在平时常见的编程范式就是命令式编程。来个生活中的例子说明一下什么是命令式编程。比如,小红想吃西红柿炒鸡蛋,然后她妈妈就去买菜、洗菜、做好西红柿炒鸡蛋。小红她妈妈就是在执行命令式编程,必须清楚的知道每一步的动作。下面...
2019-10-18 22:38:15
3352
1
原创 Python at Netflix——评论
Python at Netflix——评论Netflix是一家以技术为导向型的公司,Spring cloud就是Netflix开源出来的框架。读了Netflix官方技术博客上的一篇文章《Python at Netflix》,文章的英文原文和链接都会放在本文下面,接下来我主要谈谈自己对这篇文章的感想。一、总结与感想首先说一下这篇文章的大概内容。Python在Netflix的多个地方都被广泛的使...
2019-09-02 00:56:35
966
原创 什么才是真正的成长?
最近每晚加班时间有点长,突然想到了这个问题,再联想到自己以前上学的经历就有了下面的感悟。成长是针对能力来说的,而不是你花了多少时间和干了多少任务。一直做能力需求低于自己当前能力水平的事,迟早要废,比如,检查一下文档里面的单词有没有拼错,段落是不是符合格式标准。做难度和自己当前能力水平相匹配的事,这只是在重复的熟练技能,比如你已经用Java写了7年的程序,然后让你对数据做一个排序,用一下log4...
2019-08-26 22:28:14
619
原创 Docker学习(二)Docker入门
Docker学习(二)Docker入门一、查看相关信息1、打印Docker版本$ docker --versionDocker version 17.12.0-ce, build c97c6d62、查看Docker安装的详细信息可以使用docker info或者docker version,不要添加--,就可以看到Docker安装的详细信息了。$ docker infoCon...
2019-08-25 23:48:34
634
原创 使用阿里云作为Docker镜像仓库
由于某些原因,访问Docker官网的镜像仓库非常的慢,于是我就打起了国内云服务的注意。最终决定使用阿里云的镜像仓库服务。下面大概介绍上传镜像到阿里云的步骤。一、注册阿里云。到阿里云官网https://homenew.console.aliyun.com/注册一个账号。二、 选择下图所示的容器镜像服务三、 设置命令空间这一步非常的重要。首先点击左侧菜单的命令空间,然后设置一个命令空...
2019-08-25 02:43:59
1549
原创 Docker学习(一)ubuntu18.04 安装Docker
要想学习docker,首先得安装一个Docker是吧。那我下面就以Ubuntu16.04为例子,来安装Docker。建议在安装docker前,把apt的源更改为国内的源,步骤可以参考Ubuntu 更换国内源Step1 卸载掉老版本的Docker老版本的Docker叫作docker, docker.io, or docker-engine. 如果Ubuntu系统已经存在这些软件的话,那么首先是...
2019-08-24 19:02:30
249
原创 JUnit4 学习笔记(一) 安装与示例
JUnit4 学习笔记(一) 安装与示例下载与安装(1) 直接使用jar下载下面这两个jar,然后添加到测试路径中:[junit.jar](https://search.maven.org/search?q=g:junit AND a:junit)hamcrest-core.jar(2) 使用Maven的方式<dependency> <groupId...
2019-08-18 22:01:57
879
原创 如何学习一个新的框架?
最近搜集了一些关于“如何学习一个新框架?”的资料,进行整理,方便以后查看,也方便有需要的人。参考资料:学习开源框架的一些总结最近一直在学习drools的有关知识,drools对于我来说了解的还是比较少的,但是项目又比较紧急。身边也没有会的人,只能自己上。而且,drools的中文资料又比较的少,学习起来还是比较痛苦的。现在的话也算是入门了,所以,总结了一些经验,不论是中文资料多或者是少,技术简单...
2019-08-15 00:48:32
2477
原创 Maven学习
Maven是为了帮助我们管理项目的依赖而存在的。Maven的功能:管理项目的依赖构建项目生成项目信息maven定义的文件目录结构下面是maven定义的文件目录:my-app|-- pom.xml`-- src |-- main | `-- java | `-- com | `-- mycompany ...
2019-08-05 00:39:35
160
原创 Git在IDEA中的使用(详细图文全解)
Git在IDEA中的使用git是一个优秀的分布式版本控制系统。但是当集成到IDEA中,每一个功能又该怎么操作呢?这篇文件涵盖了IDEA中常见的Git功能的操作,每一步都有图示,强烈建议收藏。文章目录Git在IDEA中的使用1. 下载安装与配置1.1 下载安装Git1.2 在IDEA中配置Git2. 克隆Github项目到本地3. 上传IDEA中已有的项目到Github4. 版本管理4.1 提交...
2019-08-05 00:15:23
83552
39
原创 Git基础知识之详细思维导图
前面学习了一下Git的基本知识,觉得应该可以对付常用的操作了,下面给出学习到的Git知识思维导图。参考资料:Git教程
2019-08-02 01:08:21
482
原创 Git 简单入门(四)之使用Github和码云,以及自定义Git操作
6. 使用github在GitHub上,可以任意Fork开源仓库;自己拥有Fork后的仓库的读写权限;可以推送pull request给官方仓库来贡献代码。7. 使用 码云国内的Git托管服务——码云(gitee.com)创建仓库和github上一样的本地库关联到码云的远程仓库自定义git配置user.name和user.email让git显示颜色忽略特殊文件忽略某些文件...
2019-08-02 00:15:34
170
原创 Git 简单入门(三)之远程仓库、分支管理和标签管理
3 远程仓库3.1 准备工作在github上创建账号github上的仓库是公开可见的不想让别人看见给Github交钱搭建Git服务器在本地生成ssh的私钥和公钥在github上设置自己的ssh公钥3.2 添加远程库在github 上创建新仓库把本地仓库推送到github仓库在本地仓库下运行$ git remote add origin <githu...
2019-08-02 00:12:56
226
原创 Git 简单入门(二)之版本管理
2. 版本管理2.1 查看仓库当前的状态命令:git status2.2 查看文件具体被修改了什么内容命令: git diff 2.3 提交修改和提交新文件一样第一步是git add 可以使用git status 查看将被提交的修改第二步是git commit -m 2.4 版本回退可以把commit理解为git仓库的快照如果误删除文件或者打乱了,可以从最近的...
2019-08-02 00:10:38
156
原创 Git 简单入门(一)之简介、安装与简单操作
1. Git简介1.1 起源Git是由linus用C语言开发的分布式版本管理系统。1.2 集中式VS分布式集中式版本管理:版本库存放在中央服务器干活的时候需要用网络连接到中央服务器缺点必须联网网速慢代表开源软件:SVN、CVS分布式版本管理:版本库在自己的电脑没有中央服务器多人如何协作你在自己电脑改动了文件A同事在自己电脑改了文件A只需把各...
2019-07-28 23:31:19
174
原创 linux替换rm命令为mv命令
linux替换rm命令为mv命令一、目的rm是Linux系统非常强大删除命令,但是使用rm命令删除文件后很难恢复。特别是对于将rm -rf ./*误敲成rm -rf /*,那可就欲哭无泪了。为了给自己的操作留有余地,会使用mv命令来替换危险的rm命令。二、步骤实现命令替换的思想其实就是采用bash内置的alias命令进行命令别名设置。2.1 代码演示在家目录下的.bashrc文件的末...
2019-07-14 14:35:53
2008
现代操作系统
2016-03-20
怎样证明spark运行程序的时候不是在一台机器上,而是在多台机器上?
2016-05-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人