《码农翻身2》
第一章 基础知识
负载均衡原理
负载均衡、水平扩展
使用DNS做负载均衡
四层负载均衡、七层负载均衡
开源软件LVS:NAT、DR
双机热备原理
冗余、监控、主机A与主机B都做master,分别为不同的业务做负载均衡,并且分别设置为对方的backup。
多路复用机制epoll
单线程,非阻塞I/O,事件循环
虚拟内存、系统调用
系统调用:涉及用户态切换到和核心态(上下文切换)
read和write:操作系统使用DMA的方式先把文件的数据从硬盘复制到内核缓冲区,然后复制到用户缓存区。(系统调用代价高)。
sendfile:零拷贝技术,减少上下文切换,避免做无谓的数据搬运,提供系统性能。
内存:大端法、小端法
编译器:高级语言转换为机器语言
信息:位+上下文
指针、二级指针、链表、二叉树
第二章 后端风云
http:无状态通讯,需借助session
分布式状态同步问题:session复制、借助redis存储session
时间换空间:token,如何退出,设置有效期,强制退出(设置黑名单)
缓存:缓存容易出现数据不一致的情况
最佳实践:先更新mysql,再删除缓存 Cache Adise Pattern
redis:缓存穿透、缓存击穿、缓存失效、布隆过滤器、分布式锁
mysql:持久化、读写分离、数据延迟,同步复制
分布式ID:雪花算法、0待定 41 时间戳 10机器id 12序列号
幂等性、一个函数只做一件事,并且不保存状态
列式数据库、行式数据库
第三章 著名软件是怎么炼成的
搜索之路:模糊匹配 like 效率低
倒排索引、搜索架构图
抽象:软件设计就是一个不断抽象的过程
中间层:所有问题,都可以增加一层抽象而得以解决
分布式:索引分片、索引备份
集群:Elasticsearch
HDFS诞生:日志系统,分布式存储,并行计算,mapReduce
任务调度系统
linux:crontab
正交设计思想:把软件中的概念抽象成x轴,y轴,z轴这样的维度,让这些概念之间互不影响,可以独立变化,可扩展
持久化、高可用、幂等性
RPC:远程调用过程
GraphQL
zookeeper
选举问题、分布式锁、集群信息同步
第四章 编程语言帝国争斗
动态一时爽,重构火葬场
泛型、反射、动态代理
GIL全局解释锁:同一时刻,只有一个线程能运行
单元测试、TDD、重构
面向接口编程而不是面向实现编程;优先使用组合而不是继承。
adapter模式、单例模式、visitor模式
面向对象设计的SOLI原则和设计模式思想,发现变化并且封装变化。
javascript:原型
c++、go
go语言:用大小写来实现权限控制
nodejs:非阻塞异步IO
异步操作:基于事件驱动,都有一个事件循环
垃圾回收:引用计数法、标记清除回收算法
面向对象编程特性:封装、继承、多态
第五章 编程语言的本质
机器语言可以直接被CPU执行,不需要编译器,只有01
汇编语言虽然只是机器语言的助记符,但是也需要被编译成机器语言才行
编程的关键就是找到、抽象出稳定的接口,并针对这个接口编程,可以让各个模块实现独立变化的目的。
优先使用组合而不是继承
开闭原则:对修改关闭,对扩展开放
元编程:用程序来生成程序
栈、队列、堆、寄存器、数组、条件分支,函数调用(栈帧)
单线程优势:无需加锁,同步状态
归类:数据传输类、算术和逻辑运算类、控制类
CPU:取指执行
第六章 网络安全
cookie失窃、浏览器同源策略(protocol,host,port需一致)
好奇是人类的天性,无论如何也无法改变。
ajax也需遵循同源策略
CORS(跨域请求):需要服务端设置信任域名
脚本注入、cookie httpOnly禁止浏览器读取、跨域请求伪造(CSRF)生成随机请求token、sql注入(预编译)、彩虹表、加盐、https、验证码、缓存区溢出攻击、
第七章 老司机经验
凡是我们读懂的东西,把它转换成某种现实中存在的东西,它到底在说什么。
费曼学习法:
1、选择要学习的概念学习;
2、扮演老师,去教授别人;
3、遇到疑问,查找资料学习;
4、简化语言
类比思维
基础知识:C语言、Linux、面向对象设计和抽象、网络和web编程基础、分布式系统的基础知识、计算机基础知识
程序员7问:
我是否在系统的业务有了整体的了解
系统的整体架构是什么样的
系统中用到了哪些技术和框架,是不是都已经精通了
是不是已经精通了多个模块甚至整个系统的代码
对于系统的非功能性需求,是不是已经掌握
了解甚至掌握了系统使用的工程实践
团队地位如何
用技术创造价值
能通过新的工具、流程、方法来提升开发效率
熟悉业务,选用最合适的技术实现业务价值
把技术输出到客户,敏捷类咨询
设计的系统能直接创造收益
code review:代码的质量由写代码的人和评审代码的人共同负责。
代码量控制、结对编程、测试驱动开发
遇到问题要深度思考,努力看到本质,才能举一反三。
原文链接:码农翻身2
如果是走打工路线 真正的翻身是反向选择 是大厂求你去 而不是增加面试筹码求大厂收留