大家好,我是君哥。我们在做消息队列的技术选型时,往往会结合业务场景进行考虑。今天来聊一聊消息队列可能会用到的7种消息场景。1普通消息消息队列最基础的功能就是生产者发送消息、Broker保存消息,消费者来消费消息,以此实现系统解耦、削峰填谷的作用。普通消息是消息队列必备的消息类型,也是系统使用场景最多的一种消息。2顺序消息顺序消息是指生产者发送消息的顺序和消费者消费消息的顺序是一致的。比如在一个电商场景,...
2023-11-24 11:41:57 1945浏览 0点赞 0回复 0收藏
大家好,我是君哥。最近好多人问我,拿到了银行科技公司的offer,要不要去。今天来讨论下这个话题。首先,找我咨询的人主要是两类,一类是博客读者,一类是我面试过的候选人,基本都是参加的银行科技公司的社招。有点出乎我意料的是,虽然今年求职环境比较差,但竟然有超过一半的人放弃了银行科技公司的offer。放弃offer我总结了一下,放弃offer的主要是三类人。5年以下一部分放弃offer的人是工作5年以下的,这部分人的特点是年...
2023-11-24 11:41:35 1743浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天重新发一下这篇文章。今天来聊一聊使用Nacos做注册中心怎么做优雅发布。跟其他的注册中心一样,Nacos作为注册中心的使用如下图:ServiceProvider启动后注册到NacosServer,ServiceConsumer则从NacosServer拉取服务列表,根据一定算法选择一个ServiceProvider来发送请求。1.优雅要求对于优雅发布,要求是ServiceProvider上线(注册到Nacos)后,服务能够正常地接收和处理请求,而ServiceProvider停服后,...
2023-11-24 11:41:14 3469浏览 0点赞 0回复 0收藏
大家好,我是君哥。最近几个朋友找我聊天,给我讲述了面试过程中遇到的一些不太理解的事情。作为一个技术面试官,今天来分享10个面试相关的套路。1.自我介绍自我介绍是一个重要的开始,好的开始是成功的一半。不需要太多花里胡哨的东西,简单、清楚的介绍自己就可以:工作履历、教育背景、擅长的技术和业务等;介绍自己项目中的亮点,比如从0到1构建了xx系统,参与过xx系统大规模重构,注意,亮点项目面试官肯定会着重问,要好...
2023-11-24 11:40:40 1805浏览 0点赞 0回复 0收藏
4.共享文件映射include<sysmman.h>voidmmap(voidaddr,sizetlength,intprot,intflags,intfd,offtoffset);我们通过将mmap系统调用中的flags参数指定为MAPSHARED,参数fd指定为要映射文件的文件描述符(filedescriptor)来实现对文件的共享映射。共享文件映射其实和私有文件映射前面的映射过程是一样的,唯一不同的点在于私有文件映射是读共享的,写的时候会发生写时复制(copyonwrite),并且多进程针对同一映射文件的修改...
2023-10-11 10:34:56 4347浏览 0点赞 0回复 0收藏
本文基于内核5.4版本源码讨论之前有不少读者给笔者留言,希望笔者写一篇文章介绍下mmap内存映射相关的知识体系,之所以迟迟没有动笔,是因为mmap这个系统调用看上去简单,实际上并不简单,可以说是非常复杂的一个系统调用。如果想要给大家把mmap背后的技术本质,正确地,清晰地还原出来,还是有一定难度的,因为mmap这一个系统调用就能撬动起整个内存管理系统,文件系统,页表体系,缺页中断等一大片的背景知识,涉及到的知识面...
2023-10-11 10:34:23 2857浏览 0点赞 0回复 0收藏
4.多级页表的演进在开始为大家介绍多级页表之前,笔者这里还是要和大家不断强化几个核心概念,这些概念非常重要,这关系到大家是否能从本质上理解多级页表的设计。页表本质上还是一个物理内存页,只不过这个物理内存页比较特殊,里面存放的是PTE,保存虚拟内存与物理内存的映射关系。既然它是一个普通的物理内存页,那么也会参与内核的调度,既会被内核swapin以及swapout,也会被缓存在CPU高速缓存中加速访问。在32位系统中,一...
2023-10-11 10:33:32 4510浏览 0点赞 0回复 0收藏
笔者之前在自己的专栏《聊聊Linux内核》里通过大量的篇幅写了一个系列关于内存管理相关的文章,在这个系列文章中,笔者分别通过虚拟内存管理和物理内存管理两个角度算是把Linux内存管理子系统的全貌给大家呈现了出来。但之前的文章都是以专题的形式给大家呈现,采用一种静态的方式来专项阐述虚拟内存管理和物理内存管理,而且内容庞大,知识点密集。所以笔者这次想让虚拟内存和物理内存两者一起动态联动起来,在这个联...
2023-10-11 10:32:47 3626浏览 0点赞 0回复 0收藏
在产品或项目的部署中,如果和下面场景类似,那么本文可能对您有所帮助。场景1、WebAPI和MySql数据部署在同一服务器(通常是测试环境);2、WebAPI和MySql使用dockercompose进行部署;3、WebAPI启动时有一些初始化的操作要做,而初始化需要从MySql中获取数据。问题1、第一次部署,执行dockercomposeupd后,WebAPI不能正常启动;2、断电、或其他原因导致的服务器重启或docker重启,WebAPI不能正常启动。原因docker容器启动时,We...
2023-08-07 14:13:50 1979浏览 0点赞 0回复 0收藏
现在,做ToB软件,不管是跟客户沟通、内部会议、还是网上的资讯,经常会看到安可、信创、国产化这样的字眼。下面通过模拟一些问题,来梳理国产化相关的知识。1、什么是安可?安可是「安全可靠」的简称。2019年,我国启动了「安全可靠工程」,旨在加强信息和网络安全领域的能力。通过安全可靠工程,我国证明了具有安全可靠的关键系统、关键应用和关键软硬件产品的研发和集成能力,初步实现了对国外信息技术产品的全方位替代。2、...
2023-08-07 14:12:49 3183浏览 0点赞 0回复 0收藏
我一直从事企业级软件研发工作,也就是我们通常称之为B端软件。近年来,我的工作重心主要在研发低代码平台和aPaaS平台,这使我对B端软件有了更深入的理解。和B端软件对应的就是我们熟悉的C端软件,我们手机中安装的那些APP就属于此类。那么,他们之间的主要区别是什么呢?最初始的印象是B端面向企业,而C端则面向个人。最近我看到一个有趣的结论:C端主要解决终端消费者的问题,需要耗费时间和金钱。例如抖音、淘宝、京东等应用...
2023-08-07 14:12:09 1629浏览 0点赞 0回复 0收藏
现在越来越多的企业级应用需要运行在国产化环境中,本文介绍下我们产品使用的中间件在国产操作系统银河麒麟的安装(不一定是最优方式,但能用)。包含;Nginx、Redis、RabbitMQ、MongoDB、dotNETCore。下图是银河麒麟服务器的信息:想要顺利安装需要确保:1、服务器能访问网络。想要完全离线的方式安装会更复杂,需要进一步研究;2、修改yum源。使用vietcyum.repos.dkylinaarch64.repo来设置yum源,文件内容如下:Kylin...
2023-08-07 14:11:22 3342浏览 0点赞 0回复 0收藏
如果在谷歌中搜索「Nginx高可用」,搜索出来的大多都是Nginx+keepalived的使用。所以,本文就介绍下怎样用Nginx和keepalived来实现应用的高可用。环境服务器:CentOS7Server1:10.211.55.3Server2:10.211.55.14Docker:23.0.5Nginx:1.23.4keepalived:1.3.5部署本次测试使用两台测试虚拟机,IP分别为10.211.55.3和10.211.55.14,Nginx使用Docker进行部署,keepalived直接在服务器部署。架构图如下:具体部署和配置步骤如下:1、...
2023-08-07 14:10:29 2068浏览 0点赞 0回复 0收藏
MongoDB是一款NoSQL数据,通常用来存储非结构化数据,我们的产品中也有用到,例如:一些文件存储在MongoDB的GridFS中。MongoDB有三种方式来实现高可用:副本集:副本集是MongoDB官方推荐的高可用解决方案。它通过在多个节点上复制数据来实现数据冗余和故障转移。副本集通常包括一个主节点和多个从节点,如果主节点发生故障,从节点可以自动选举出一个新的主节点,从而实现自动故障转移。分片集群:分片集群是一种横向扩展的解决...
2023-08-07 14:09:55 2127浏览 0点赞 0回复 0收藏
产品的各种环境使用了很多CentOS虚拟机,默认情况下root目录空间是50G,随着使用时间越来越长,空间会变得不够用。一直采用的方法就是清除无用的镜像和Docker日志,服务器就一直处于可用的状态。直到连清理都没用的时候,才想起来要要需找其他的方法。当没有逼到绝境的时候,我们会习惯性依赖自己熟悉的方法和工具,可能不高效,但能解决问题,这种又不是不能用的思维害人不浅,会让人呆在舒适区不愿...
2023-08-07 14:09:35 1983浏览 0点赞 0回复 0收藏
.NET发展很快,现在.NET8的预览版已经发布了,但我们现在还在使用.NETCore3.1,将.NET升级到.NET6已经势在必行。记得之前从.NETCore2.1升级到.NETCore3.1的时候,虽然网上有很多的教程,也废了一番力气,各种配置的修改,引用的第三方的库的升级等。现在,在VS2022的扩展中有一个升级的工具:.NETUpgradeAssistant,用来做.NET框架的升级,非常方便。下面来讲解下怎样使用:1、在VS2022中进行.NETUpgradeAssistant的安装。按照提...
2023-08-07 14:08:54 2340浏览 0点赞 0回复 0收藏
现在,代码的版本管理大多都在使用git,常用的一些代码托管平台有:Github、码云、Gitlab等,不管用的哪个平台,我们经常会做提交代码的操作,但很容易忽视commitmessage的写法。在一些工具中进行代码提交,提交信息是必填的,正因为是必填,就会出现很多随意的内容,例如:ok、update、test等,这些毫无意义的信息内容会给后续工作带来很多麻烦。所以,春节后上班第一件事就是在团队内强调提交信息的重要性,并制定统一规范。...
2023-08-03 17:00:22 2061浏览 0点赞 0回复 0收藏
在《程序员不可错过的一款Hexo博客主题》中介绍了我博客的主题stellar,还介绍了部署方式的调整:空间:使用GitHubPage,然后进行域名的绑定;域名:需要修改DNSPod中的DNS解析;图床:选用GitHub图床,配合jsdelivr做CDN加速;写作工具:Typora;发布方式:GitHubAction。尽管这种方式有很大的改进,但因为使用的是hexo,每次发布博客文章的步骤:使用hexo的命令创建一个md文件;将写好的文章复制到改md文件中,并填写...
2023-08-03 16:59:43 2539浏览 0点赞 0回复 0收藏
最小API并不是在.NET7中才加入的,记得应该是在.NET6中就已经提供,只是对我来说,到现在才开始使用。创建一个最小API在VS2022中创建WebAPI项目,不勾选使用控制器,创建出来的就是最小API:不勾选使用控制器,就会创建最小API模板;启用OpenAPI,默认会添加Swagger;顶级语句:顶级语句是C9.0中添加的新特性,如果勾选不使用,Program类中还会出现main函数。创建出来的工程只有两个文件,重大的改变就是,没有之前的Startup类...
2023-08-03 16:58:52 2219浏览 0点赞 0回复 0收藏
接口我们都很了解了,在编写代码的时,如果有一定的抽象思维,就会将不同对象的相同行为抽象出来,放到接口中,我们最熟悉的就是在接口中写一堆方法的定义。微软似乎一直都想在接口上做改进。在C8中,接口中可以进行方法的定义,也就是默认接口方法,这个功能最大的好处是,当在接口中进行方法扩展时,之前的实现类可以不受影响,而在C8之前,接口中如果要添加方法,所有的实现类需要进行新增接口方法的实现,否则编译失败。默...
2023-08-03 16:58:19 2597浏览 0点赞 0回复 0收藏