ARTS 是由左耳朵耗子陈皓在极客时间专栏《左耳听风》中发起的一个每周学习打卡计划。
Algorithm:至少做一个 LeetCode 的算法题。主要为了编程训练和学习。
Review :阅读并点评至少一篇英文技术文章。主要为了学习英文,如果你英文不行,很难成为技术高手。
Tip:学习至少一个技术技巧。主要是为了总结和归纳你日常工作中所遇到的知识点。
Share:分享一篇有观点和思考的技术文章。主要为了输出你的影响力,能够输出你的价值观。
Algorithm
LeetCode 027 移除元素
func removeElement(nums []int, val int) int {
numsLen := len(nums)
provit := 0
curlen := numsLen
for i := 0; i <= numsLen-1; i++ {
if nums[i] != val {
nums[provit] = nums[i]
provit++
} else {
curlen--
}
}
return curlen
}
LeetCode 026 删除排序数组的重复项
func removeDuplicates(nums []int) int {
lenght := len(nums)
curLen := lenght
privot := 1
if lenght == 2 {
if nums[0] == nums[1] {
return 1
}
return 2
}
if lenght <= 1 {
return lenght
}
for i := 0; i < lenght-1; i++ {
if nums[i] != nums[i+1] {
nums[privot] = nums[i+1]
privot++
} else {
curLen--
}
}
return curLen
}
Review
本文是 Nginx 博客微服务系列文章中的第一篇,主要讲解了传统的单体架构到微服务架构的演进过程。
本文从一个打车应用的设计入手,阐述了单体应用架构设计中的六边形架构(hexagonal architecture),,适配器和接口连接外部系统和内部系统,虽然他以逻辑模块化组织结构,但是整个打车系统被打包成一个单体应用服务来部署。
随着业务越来越复杂,代码量越来越大,逐年累月 由一个简单的项目演变成一个巨大的工程。功能的开发、问题的定位和项目的部署变得越来越复杂和不可控。
这个超大型项目渐渐的拖慢开发进度,由于这些问题,微服务架构,把大型项目进行拆分变得流行起来...
Tip
分层
- 业务分层 前台 、中台、后台
- 架构分层 接入层、网关层、业务层、中间件层、存储层
- 应用分层 MVC
- 网络分层 ISO TCP 分层
- 数据存储分层 SRAM DRAM SSD HDD
缓存设计
-
缓存策略
-
局限性原理 :时间局限性
空间局限性 -
LRU 为原理的实现
-
缓存分层
-
cpu cache
-
page cache
-
memery
-
file
-
缓存更新
- cache aside
- write through (代理模式)
- write back
高并发程序设计
方法
- scale out
- 异步
- 缓存
目标
- 高可用
- 指标: 可用性 = 故障修复时间/(故障间隔时间 + 故障修复时间)
- 优化路径 : 心跳监测、故障转移(数据一致性)、限流、降级、 自动化运维、多租户设计
- 高性能
- 指标 :吞吐量 、响应时间、完成时间、加速比
- 优化路径 :IO 密集型、CPU 密集型
- 可扩展
- 无状态服务利于扩展
- 横向拆分,纵向分层利于扩展
Share
工业级散列表的设计目标
- 高可用(性能稳定,防止哈希碰撞)
- 高性能(快速增删查)
- 可扩展(支持动态扩容)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于