ARTS 007

本贴最后更新于 1864 天前,其中的信息可能已经时异事殊

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

工业级散列表的设计目标

  • 高可用(性能稳定,防止哈希碰撞)
  • 高性能(快速增删查)
  • 可扩展(支持动态扩容)

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...