第一讲:怎样听懂对方的真实意图

  • 结构化倾听:
    • 对方陈述了什么事实(接收事实)
    • 对方表达了什么情绪(感受情绪)
    • 对方期待我做出的行动(理解对方期待的行为)
  • 应对:
    • 承认事实
    • 安抚情绪
    • 开展行动
  • 如何辨别事实还是情绪?
    • 路标词:“总是”,“老是”,“永远”,这种显然不是事实而是夸张的描述,就表示是情绪。
    • 看一句话是主观占多还是客观占多,主观情绪,客观事实。

第二讲:怎么让对方相信我听懂对方的意图

  • 三步确认法:
    • 确认事实
    • 回应情绪
    • 明确行动纲领
阅读全文 »

什么是分布式搜索引擎?

分布式搜索引擎是一种搜索引擎系统,它利用多台计算机或服务器进行协作,共同处理搜索请求和索引数据,以提供更快速、更强大的搜索能力。
传统的搜索引擎通常是基于集中式架构构建的,其中单个服务器或集群负责处理所有搜索请求和索引数据。然而,随着互联网规模的不断扩大和数据量的急剧增长,集中式搜索引擎面临着许多挑战,如单点故障、可扩展性和性能瓶颈。
分布式搜索引擎通过将搜索和索引任务分发到多个节点上进行并行处理,充分利用计算资源和存储能力。它可以将索引数据分片存储在不同的服务器上,每个服务器负责处理自己所存储的数据片段。当用户提交搜索请求时,请求可以发送到任意一个节点,并且每个节点可以同时进行搜索操作,最后将结果汇总返回给用户。
分布式搜索引擎的好处包括:

  • 高可扩展性:可以根据需要增加或减少节点,以适应不断增长的搜索负载和数据量。
  • 高性能:利用并行处理和分布式存储,可以提供更快的搜索响应时间和更高的吞吐量。
  • 容错性:由于数据和计算任务被分散到多个节点,系统具有更高的容错性,即使某个节点发生故障,搜索引擎仍然可以继续工作。
  • 水平扩展:通过添加更多的节点,可以实现搜索引擎的水平扩展,而无需进行大规模的硬件升级。
  • 分布式索引:索引数据可以分布在多个节点上,减轻了单个节点的负载压力,并提高了索引的性能和可用性。
阅读全文 »

作为程序员,国内可以考的资格证书有:

  1. 计算机技术与软件专业资格考试证书:由国家人力资源和社会保障部、工业和信息化部领导下的国家级考试,一共5个专业类别,分别是计算机软件、计算机网络、计算机应用技术、信息系统、信息服务,并分设了高、中、初级专业资格考试。
    1. 报名地址:https://bm.ruankao.org.cn/
    2. 真题练习:https://wangxiao.xisaiwang.com/tiku2/list-zt101.html
  2. 华为认证:由华为公司推出的网络工程师认证,现在的认可度很高,是基于ICT产业链人才个人职业发展生命周期,以层次化的职业技术认证为指引,搭载华为“云-管-端”融合技术,推出的覆盖IP、IT、CT以及ICT融合技术领域的认证体系。
    1. 报名地址:https://e.huawei.com/cn/talent/cert/#/careerCert
    2. 学习地址:https://e.huawei.com/cn/talent/learning/#/home
  3. 思科认证:由网络著名厂商Cisco公司推出,是互联网领域的国际权威认证。思科认证有CCNA、CCDA、CCNP、CCDP、CCSP、CCIP、CCVP、CCIE等多种不同级别、不同内容、不同方向的各种认证。
    1. 地址:https://learningnetwork.cisco.com/s/cn-expert-certifications
  4. Red Hat认证:由红帽linux公司推出的,是以实际操作能力为基础的测试项目,主要考察考生在实际操作系统中的实践能力。
    1. 地址:https://www.redhat.com/zh/services/certifications
  5. 阿里云认证:从低到高分别是助理工程师(ACA)、专业工程师(ACP)、高级工程师(ACE)。
    1. 报名地址:https://edu.aliyun.com/certification/
  6. NISP和CISP:NISP一级证书是考取NISP二级的必要条件,并且NISP二级证书可以免培训、免考试申领换取CISP证书,填补了在校大学生无法考取CISP证书的空白。CISP即“注册信息安全专业人员”,由中国信息安全测评中心根据中央编办授权,是国家对信息安全人员资质的高度认可,是目前国内权威性很高的信息系统安全认证,也是从事信息安全工作人员必备的“专业身份证”。

这些证书对程序员的职业发展都有一定的帮助,可以根据自己的需求和职业规划选择相应的证书进行考试。

数据库相关

RBAC(Role-based access control)

RBAC(基于角色的访问控制)是一种针对产品去挖掘需求时所用到的Who(角色)、What(拥有什么资源)、How(有哪些操作)的方式。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What进行How的操作”。RBAC主要包含四个子模型:RBAC0、RBAC1、RBAC2和RBAC3,整体又叫做RBAC96。用户与会话一对一,会话与角色一对多。在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。RBAC通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型),极大地方便了权限的管理。

  • RBAC0:这是RBAC模型的基础,它定义了完全支持RBAC概念的任何系统的最低需求。在RBAC0模型中,用户和角色之间可以是多对多的关系,即一个用户在不同场景下可以有不同的角色。
  • RBAC1:该模型在RBAC0的基础上引入了角色间的继承关系,即角色上有了上下级的区别。角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。这种模型适合于角色之间层次分明,可以给角色分组分层。
  • RBAC2:该模型在RBAC0的基础上引入了角色间的约束关系,主要约束规则包括:角色间的互斥关系,在处理用户和这些角色之间的关系时,包括静态分离和动态分离。静态分离指互斥的角色不能同时赋予同一个用户;动态分离指用户不能同时操作两个互斥的角色进行登录。
  • RBAC3:该模型同时包含了RBAC1和RBAC2的特性(继承关系和约束关系)。
阅读全文 »

docker启动nginx

  • 拉取nginx最新版本: docker pull nginx
    • 启动nginx:docker run --name nginx-test --mount type=bind,source=/docker/nginx/html,target=/usr/share/nginx/html --mount type=bind,source=/docker/nginx/nginx,target=/etc/nginx --mount type=bind,source=/docker/nginx/logs,target=/var/log/nginx -p 8081:80 -d nginx
      • 其中/usr/share/nginx/html是默认的nginx容器页面路径
      • -p 8081:80是端口映射配置
      • /etc/nginx是默认的nginx容器配置目录
      • d 表示后台运行
      • 最后的nginx表示使用nginx镜像启动
    • 复制nginx容器配置文件目录到本地目录:docker container cp nginx-test:/etc/nginx/nginx.conf .
    • 重新启动nginx
    • docker容器内执行nginx指令
      • reload:docker exec -it nginx-test nginx -s reload
      • test:docker exec -it nginx-test nginx -t
阅读全文 »

application.properties 常用配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#服务器端口配置:

server.port=8080
#用于指定应用程序监听的端口号。

#数据库连接配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=secret
#用于配置数据库连接的URL、用户名和密码。

#日志配置:

logging.level.root=INFO
logging.file=/path/to/application.log
#用于配置日志级别和日志文件的路径。

#Spring MVC配置:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
#用于配置视图解析器的前缀和后缀,以便正确解析和渲染视图。

#静态资源配置:

spring.resources.static-locations=classpath:/static/
#用于配置静态资源文件的位置,比如CSS、JavaScript和图片等。

#国际化配置:

spring.messages.basename=messages
spring.messages.encoding=UTF-8
#用于配置国际化资源文件的基名和编码方式。

#缓存配置:

spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379
#用于配置缓存的类型和相关的参数,比如Redis缓存的主机和端口。
阅读全文 »

邓宁克鲁格效应

  • 能力越差的人越容易高估自己
  • 能力越差的人发现不了自己和别人的差距
  • 人类有虚幻的优越感,总觉得自己比别人厉害

架构哲学

系统架构的使命和责任

  • 兼容过去问题:历史数据和业务的兼容,⽼系统过度
    • 空中加油:难度最⼤、历史数据兼容复杂、业务分⽀多、发布过程中的灰度要⾮常短,切换速度再快也要防⽌脏数据的产⽣
    • 新旧分割:⽼⽤户⽤⽼系统,新⽤户⽤新系统,数据互相隔离,待新系统完全稳定后可以对⽼系统⽤户做后端迁移,常⽤于APP版本共存阶段
    • 休克疗法:⼀⼑切,制定好停机时间,⽼系统关闭,历史数据迁移,新系统开启使⽤,升级失败会处于两难的境地,多⽤于垄断性APP或强⼤的甲⽅
  • 解决当前问题:新需求的和业务功能的扩展
    • 投⼊产出⽐⾼:需求估时中,对系统流程和架构的了解时间⽐例要低于20%
    • ⽇常维护成本低:系统功能性问题不影响业务需求的发展
    • 可扩展性强:避免出现增加⼀个⼩功能就进⾏⼤动⼲⼽的整体回归测试
    • 系统稳定、故障率低:SLA⾄少在四个9,服务停机时间不能超过5分钟以上
  • 适度解决未来问题:don’t over design
    • 充分分析:时间成本、⼈⼒成本、机会成本
    • 未来2-3年⽤户规模的扩⼤程度
    • 未来2-3年现有⽤户的⾃我成⻓和进化⽅向
    • 竞争对⼿商业竞争的残酷性
    • 未来2-3年技术栈的更新迭代
    • 研发团队的⾃身因素(团队稳定、结构、成本)
阅读全文 »

翻译自RabbitMQ vs. Kafka – An Architect’s Dilemma (Part 1)

介绍

作为一位处理许多基于微服务的系统的软件架构师,我经常遇到一个不断重复的问题——“我应该使用RabbitMQ还是Kafka?”。出于某种原因,许多开发人员认为这些技术可以互相替代。虽然在某些情况下这是正确的,但这些平台之间存在着各种根本性的差异。因此,在不同的场景下需要不同的解决方案,选择错误的方案可能会严重影响您设计、开发和维护软件解决方案的能力。

本博文的目标首先是介绍基本的异步消息传递模式。然后,它继续介绍RabbitMQ和Kafka以及它们的内部结构。第二部分重点介绍了这些平台之间的关键差异,它们的各种优势和劣势,以及如何在两者之间进行选择。

阅读全文 »
0%