首页 文章 精选 留言 我的

精选列表

搜索[Harness工程],共10000篇文章
优秀的个人博客,低调大师

烂尾工程: Java实现的汇编语言编译器

在半年前的《中文编程的尝试历程小记》中简单介绍了这一项目. 由于短期内估计不会继续进行, 而且这个项目好像是至今个人在中文命名实践中的代码量最大的一个项目, 谨在此作一小结. 最新的源码库在program-in-chinese/assembler-in-chinese-experiment. 大致设计草图 以'mov rax 0x1122334455667788'指令示例如下: 当前进度 仅支持两个操作数的部分指令, 第二个操作数仅支持立即数 第一个操作数可以是寄存器,或者简单的内存寻址,如[0] 支持强制类型,如add ax,strict word 5 生成空可执行文件(PE), 尚未填入生成的二进制码 源码结构 下面是所有文件, 希望是一目了然? "分析器类"从单行汇编指令字符串分析生成"代码行类", "汇编器类"从"代码行类"生成二进制码. 其他主要是业务数据描述("模型"包)和功用(utils). 假如要重新继续这一项目, 下面是一些想法: 考虑使用Antlr4, 用类似antlr/grammars-v4的语法文件辅助生成分析器, 省去手动编写分析器 最好有汇编和x64指令背景的开发者2018-01-03

优秀的个人博客,低调大师

Java工程师成神之路(2019正式版)

主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 v1.1 2018-03-12 增加新技术知识、完善知识体系 v2.0 2019-02-19 结构调整,更适合从入门到精通;进一步完善知识体系; 新技术补充; 一、基础篇 面向对象 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 平台无关性 Java如何实现的平台无关 JVM还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala) 值传递 值传递、引用传递 为什么说Java中只有值传递 封装、继承、多态 什么是多态、方法重写与重载 Java的继承与实现 构造函数与默认构造函数 类变量、成员变量和局部变量 成员变量和方法作用域 Java基础知识 基本数据类型 8种基本数据类型:整型、浮点型、布尔型、字符型 整型中byte、short、int、long的取值范围 什么是浮点型?什么

优秀的个人博客,低调大师

Java 工程师成神之路 | 2019正式版

基础篇 01面向对象 → 什么是面向对象面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关性Java 如何实现的平台无关 JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala) → 值传递值传递、引用传递 为什么说 Java 中只有值传递 → 封装、继承、多态什么是多态、方法重写与重载 Java 的继承与实现 构造函数与默认构造函数 类变量、成员变量和局部变量 成员变量和方法作用域 02 Java 基础知识 → 基本数据类型7 种基本数据类型:整型、浮点型、布尔型、字符型 整型中 byte、short、int、long 的取值范围 什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额? → 自动拆装箱什么是包装类型、什么是基本类型、什么是自动拆装箱 Integer 的缓存机制 → String字符串的不可变性 JDK 6 和 JDK 7 中 substring 的原理及区别、 replaceFirst、replaceAll、replace 区别、 String 对“+”的重载、字符串拼接的几种方式和区别 String.valueOf 和 Integer.toString 的区别、 switch 对 String 的支持 字符串池、常量池(运行时常量池、Class 常量池)、intern → 熟悉 Java 中各种关键字transient、instanceof、final、static、volatile、synchronized、const 原理及用法 → 集合类常用集合类的使用、ArrayList 和 LinkedList 和 Vector 的区别 、SynchronizedList 和 Vector 的区别、HashMap、HashTable、ConcurrentHashMap 区别、 Set 和 List 区别?Set 如何保证元素不重复? Java 8 中 stream 相关用法、apache 集合处理工具类的使用、不同版本的 JDK 中 HashMap 的实现的区别以及原因 Collection 和 Collections 区别 Arrays.asList 获得的 List 使用时需要注意什么 Enumeration 和 Iterator 区别 fail-fast 和 fail-safe CopyOnWriteArrayList、ConcurrentSkipListMap → 枚举枚举的用法、枚举的实现、枚举与单例、Enum 类 Java 枚举如何比较 switch 对枚举的支持 枚举的序列化如何实现 枚举的线程安全性问题 → IO字符流、字节流、输入流、输出流、 同步、异步、阻塞、非阻塞、Linux 5 种 IO 模型 BIO、NIO 和 AIO 的区别、三种 IO 的用法与原理、netty → 反射反射与工厂模式、反射有什么用 Class 类、java.lang.reflect.* → 动态代理静态代理、动态代理 动态代理和反射的关系 动态代理的几种实现方式 AOP → 序列化什么是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全 → 注解元注解、自定义注解、Java 中常用注解使用、注解与反射的结合 Spring 常用注解 → JMS什么是 Java 消息服务、JMS 消息传送模型 → JMXjava.lang.management.、 javax.management. → 泛型泛型与继承、类型擦除、泛型中 KTVE? object 等的含义、泛型各种用法 限定通配符和非限定通配符、上下界限定符 extends 和 super List 和原始类型 List 之间的区别? "> List<?> 和 List 之间的区别是什么?"> → 单元测试junit、mock、mockito、内存数据库(h2) → 正则表达式java.lang.util.regex.* → 常用的 Java 工具库commons.lang、commons.*...、 guava-libraries、 netty → API & SPIAPI、API 和 SPI 的关系和区别 如何定义 SPI、SPI 的实现原理 → 异常异常类型、正确处理异常、自定义异常 Error 和 Exception 异常链、try-with-resources finally 和 return 的执行顺序 → 时间处理时区、冬令时和夏令时、时间戳、Java 中时间 API 格林威治时间、CET,UTC,GMT,CST 几种常见时间的含义和关系 SimpleDateFormat 的线程安全性问题 Java 8 中的时间处理 如何在东八区的计算机上获取美国时间 → 编码方式Unicode、有了 Unicode 为啥还需要 UTF-8 GBK、GB2312、GB18030 之间的区别 UTF8、UTF16、UTF32 区别 URL 编解码、Big Endian 和 Little Endian 如何解决乱码问题 → 语法糖Java 中语法糖原理、解语法糖 语法糖:switch 支持 String 与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、 断言、数值字面量、for-each、try-with-resource、Lambda 表达式 03阅读源代码 String、Integer、Long、Enum、 BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、 ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSet 04 Java 并发编程 → 并发与并行什么是并发、什么是并行 并发与并行的区别 → 什么是线程,与进程的区别线程的实现、线程的状态、优先级、线程调度、创建线程的多种方式、守护线程 线程与进程的区别 → 线程池自己设计线程池、submit() 和 execute()、线程池原理 为什么不允许使用 Executors 创建线程池 → 线程安全死锁、死锁如何排查、线程安全和内存模型的关系 → 锁CAS、乐观锁与**悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、 锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁 → 死锁什么是死锁 死锁如何解决 → synchronizedsynchronized 是如何实现的? synchronized 和 lock 之间关系、不使用 synchronized 如何实现一个线程安全的单例 synchronized 和原子性、可见性和有序性之间的关系 → volatilehappens-before、内存屏障、编译器指令重排和 CPU 指令重 volatile 的实现原理 volatile 和原子性、可见性和有序性之间的关系 有了 symchronized 为什么还需要 volatile → sleep 和 wait→ wait 和 notify→ notify 和 notifyAll→ ThreadLocal→ 写一个死锁的程序→ 写代码来解决生产者消费者问题→ 并方包Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、ConcurrentHashMap、Executors 2底层篇 01JVM → JVM 内存结构 class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、 堆和栈区别 Java 中的对象一定在堆上分配吗? → Java 内存模型计算机内存模型、缓存一致性、MESI 协议 可见性、原子性、顺序性、happens-before、 内存屏障、synchronized、volatile、final、锁 → 垃圾回收GC 算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收 GC 参数、对象存活的判定、垃圾收集器(CMS、G1、ZGC、Epsilon) → JVM 参数及调优-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、 -XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold → Java 对象模型oop-klass、对象头 → HotSpot即时编译器、编译优化 → 虚拟机性能监控与故障处理工具jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace, TProfiler Arthas 02 类加载机制 classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw) 03 编译与反编译 什么是编译(前端编译、后端编译)、什么是反编译 JIT、JIT 优化(逃逸分析、栈上分配、标量替换、锁优化) 编译工具:javac 反编译工具:javap 、jad 、CRF 3进阶篇 01 Java 底层知识 → 字节码、class 文件格式→ CPU 缓存,L1,L2,L3 和伪共享→ 尾递归→ 位运算用位运算实现加、减、乘、除、取余 02 设计模式设计模式的六大原则: 开闭原则(Open Close Principle)、里氏代换原则(Liskov Substitution Principle)、依赖倒转原则(Dependence Inversion Principle) 接口隔离原则(Interface Segregation Principle)、迪米特法则(最少知道原则)(Demeter Principle)、合成复用原则(Composite Reuse Principle) → 了解 23 种设计模式 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。 → 会使用常用设计模式单例的七种写法:懒汉——线程不安全、懒汉——线程安全、饿汉、饿汉——变种、静态内部类、枚举、双重校验锁 工厂模式、适配器模式、策略模式、模板方法模式、观察者模式、外观模式、代理模式等必会 → 不用 synchronized 和 lock,实现线程安全的单例模式→ 实现 AOP→ 实现 IOC→ nio 和 reactor 设计模式 03 网络编程知识 → tcp、udp、http、https 等常用协议 三次握手与四次关闭、流量控制和拥塞控制、OSI 七层模型、tcp 粘包与拆包 → http/1.0 http/1.1 http/2 之前的区别http 中 get 和 post 区别 常见的 web 请求返回的状态码 404、302、301、500分别代表什么 → http/3→ Java RMI,Socket,HttpClient→ cookie 与 sessioncookie 被禁用,如何实现 session → 用 Java 写一个简单的静态文件的 HTTP 服务器→ 了解 nginx 和 apache 服务器的特性并搭建一个对应的服务器→ 用 Java 实现 FTP、SMTP 协议→ 进程间通讯的方式→ 什么是 CDN?如果实现?→ DNS什么是 DNS 、记录类型: A 记录、CNAME 记录、AAAA 记录等域名解析、根域名服务器 DNS 污染、DNS 劫持、公共 DNS:114 DNS、Google DNS、OpenDNS → 反向代理正向代理、反向代理 反向代理服务器 04 框架知识 → Servlet 生命周期 线程安全问题 filter 和 listener web.xml 中常用配置及作用 → Hibernate什么是 OR Mapping Hibernate 的懒加载Hibernate 的缓存机制 Hibernate / Ibatis / MyBatis 之间的区别 → Spring Bean 的初始化AOP 原理实现 Spring 的IOCSpring 四种依赖注入方式→ Spring MVC什么是 MVC Spring mvc 与 Struts mvc 的区别 → Spring BootSpring Boot 2.0、起步依赖、自动配置、 Spring Boot 的 starter 原理,自己实现一个 starter → Spring Security→ Spring Cloud服务发现与注册:Eureka、Zookeeper、Consul 负载均衡:Feign、Spring Cloud Loadbalance 服务配置:Spring Cloud Config 服务限流与熔断:Hystrix 服务链路追踪:Dapper 服务网关、安全、消息 05 应用服务器知识 → JBoss→ tomcat→ jetty→ Weblogic 06 工具 → git & svn→ maven & gradle→ Intellij IDEA常用插件:Maven Helper 、FindBugs-IDEA、阿里巴巴代码规约检测、GsonFormat Lombok plugin、.ignore、Mybatis plugin 4高级篇 01 新技术 → Java 8 lambda 表达式、Stream API、时间 API → Java 9Jigsaw、Jshell、Reactive Streams → Java 10局部变量类型推断、G1 的并行 Full GC、ThreadLocal 握手机制 → Java 11ZGC、Epsilon、增强 var → Spring 5响应式编程 → Spring Boot 2.0→ HTTP/2→ HTTP/3 02 性能优化 使用单例、使用 Future 模式、使用线程池 选择就绪、减少上下文切换、减少锁粒度、数据压缩、结果缓存 03 线上问题分析 → dump 获取 线程 Dump、内存 Dump、gc 情况 → dump 分析分析死锁、分析内存泄露 → dump 分析及获取工具jstack、jstat、jmap、jhat、Arthas → 自己编写各种 outofmemory,stackoverflow 程序HeapOutOfMemory、 Young OutOfMemory、 MethodArea OutOfMemory、ConstantPool OutOfMemory、 DirectMemory OutOfMemory、Stack OutOfMemory Stack OverFlow → Arthasjvm 相关、class/classloader 相关、monitor/watch/trace 相关、 options、管道、后台异步任务 文档:https://alibaba.github.io/arthas/advanced-use.html → 常见问题解决思路内存溢出、线程死锁、类加载冲突 → 使用工具尝试解决以下问题,并写下总结当一个 Java 程序响应很慢时如何查找问题 当一个 Java 程序频繁 FullGC 时如何解决问题 如何查看垃圾回收日志 当一个 Java 应用发生 OutOfMemory 时该如何解决 如何判断是否出现死锁 如何判断是否存在内存泄露 使用 Arthas 快速排查 Spring Boot 应用404/401问题 使用 Arthas 排查线上应用日志打满问题 利用 Arthas 排查 Spring Boot 应用 NoSuchMethodError 04编译原理知识 → 编译与反编译→ Java 代码的编译与反编译→ Java 的反编译工具javap 、jad 、CRF → 即时编译器→ 编译过程词法分析,语法分析(LL 算法,递归下降算法,LR 算法)语义分析,运行时环境,中间代码,代码生成,代码优化 05 操作系统知识 → Linux 的常用命令→ 进程间通信→ 进程同步生产者消费者问题、哲学家就餐问题、读者写者问题 → 缓冲区溢出→ 分段和分页→ 虚拟内存与主存→ 虚拟内存管理→ 换页算法 06 数据库知识 → MySQL 执行引擎→ MySQL 执行计划如何查看执行计划,如何根据执行计划进行 SQL 优化 → 索引Hash 索引、B 树索引(B+树、和B树、R树) 普通索引、唯一索引 覆盖索引、最左前缀原则、索引下推 → SQL 优化→ 数据库事务和隔离级别事务的隔离级别、事务能不能实现锁的功能 → 数据库锁行锁、表锁、使用数据库锁实现乐观锁、 → 连接内连接,左连接,右连接 → 数据库主备搭建→ binlog→ redolog→ 内存数据库h2 → 分库分表→ 读写分离→ 常用的 NoSql 数据库redis、memcached → 分别使用数据库锁、NoSql 实现分布式锁→ 性能调优→ 数据库连接池 07 数据结构与算法知识 → 简单的数据结构 栈、队列、链表、数组、哈希表、 栈和队列的相同和不同之处 栈通常采用的两种存储结构 → 树二叉树、字典树、平衡树、排序树、 B 树、B+ 树、R 树、多路树、红黑树 → 堆大根堆、小根堆 → 图有向图、无向图、拓扑 → 排序算法稳定的排序:冒泡排序、插入排序、鸡尾酒排序、桶排序、计数排序、归并排序、原地归并排序、二叉排序树排序、鸽巢排序、基数排序、侏儒排序、图书馆排序、块排序 不稳定的排序:选择排序、希尔排序、Clover 排序算法、梳排序、堆排序、平滑排序、快速排序、内省排序、耐心排序 各种排序算法和时间复杂度 → 两个栈实现队列,和两个队列实现栈→ 深度优先和广度优先搜索→ 全排列、贪心算法、KMP 算法、hash 算法→ 海量数据处理分治,hash 映射,堆排序,双层桶划分,Bloom Filter,bitmap,数据库索引,mapreduce 等。 08大数据知识 → Zookeeper 基本概念、常见用法 → Solr,Lucene,ElasticSearch在 linux 上部署 solr,solrcloud,新增、删除、查询索引 → Storm,流式计算,了解 Spark,S4在 linux 上部署 storm,用 zookeeper 做协调,运行 storm hello world,local 和 remote 模式运行调试 storm topology。 → Hadoop,离线计算HDFS、MapReduce → 分布式日志收集 flume,kafka,logstash→ 数据挖掘,mahout 09 网络安全知识 → XSS XSS 的防御 → CSRF→ 注入攻击SQL 注入、XML 注入、CRLF 注入 → 文件上传漏洞→ 加密与解密对称加密、非对称加密、哈希算法、加盐哈希算法 MD5,SHA1、DES、AES、RSA、DSA 彩虹表 → DDOS攻击DOS 攻击、DDOS 攻击 memcached 为什么可以导致 DDos 攻击、什么是反射型 DDoS 如何通过 Hash 碰撞进行 DOS 攻击 → SSL、TLS,HTTPS→ 用 openssl 签一个证书部署到 apache 或 nginx 5架构篇 01分布式 数据一致性、服务治理、服务降级 → 分布式事务 2PC、3PC、CAP、BASE、 可靠消息最终一致性、最大努力通知、TCC → Dubbo服务注册、服务发现,服务治理 http://dubbo.apache.org/zh-cn/ → 分布式数据库怎样打造一个分布式数据库、什么时候需要分布式数据库、 mycat、otter、HBase → 分布式文件系统mfs、fastdfs → 分布式缓存缓存一致性、缓存命中率、缓存冗余 → 限流降级Hystrix、Sentinal → 算法共识算法、Raft 协议、Paxos 算法与 Raft 算法、 拜占庭问题与算法、2PC、3PC 02 微服务 SOA、康威定律 → ServiceMeshsidecar → Docker & Kubernets→ Spring Boot→ Spring Cloud 03 高并发 → 分库分表→ CDN 技术→ 消息队列ActiveMQ 04 监控 → 监控什么 CPU、内存、磁盘 I/O、网络 I/O 等 → 监控手段进程监控、语义监控、机器资源监控、数据波动 → 监控数据采集日志、埋点 → Dapper 05 负载均衡 tomcat 负载均衡、Nginx 负载均衡 四层负载均衡、七层负载均衡 06 DNS DNS 原理、DNS 的设计 07 CDN 数据一致性 6扩展篇 01 云计算 IaaS、SaaS、PaaS、虚拟化技术、openstack、Serverlsess 02 搜索引擎 Solr、Lucene、Nutch、Elasticsearch 03权限管理 Shiro 04 区块链 哈希算法、Merkle 树、公钥密码算法、共识算法、 Raft 协议、Paxos 算法与 Raft 算法、拜占庭问题与算法、消息认证码与数字签名 → 比特币挖矿、共识机制、闪电网络、侧链、热点问题、分叉 → 以太坊→ 超级账本 05人工智能 数学基础、机器学习、人工神经网络、深度学习、应用场景。 → 常用框架TensorFlow、DeepLearning4J 06 loT 07 量子计算 08 AR & VR 09其他语言 Groovy、Python、Go、NodeJs、Swift、Rust 7推荐书籍 《深入理解 Java 虚拟机》 《Effective Java》 《深入分析 Java Web 技术内幕》 《大型网站技术架构》 《代码整洁之道》 《架构整洁之道》 《Head First 设计模式》 《maven 实战》 《区块链原理、设计与应用》 《Java 并发编程实战》 《鸟哥的 Linux 私房菜》 《从Paxos 到 Zookeeper》 《架构即未来》 原文发布时间为:2019-02-18本文作者: Hollis 本文来自云栖社区合作伙伴“ Hollis ”,了解相关信息可以关注“ Hollis ”。

优秀的个人博客,低调大师

互联网 Java 工程师进阶知识完全扫盲

高并发架构 消息队列 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点? 如何保证消息队列的高可用? 如何保证消息不被重复消费?(如何保证消息消费时的幂等性) 如何保证消息的可靠性传输?(如何处理消息丢失的问题) 如何保证消息的顺序性? 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决? 如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。 搜索引擎 es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)? es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片? 缓存 在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果? Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多? Redis 都有哪些数据类型?分别在哪些场景下使用比较合适? Redis 的过期策略都有哪些?手写一下 LRU 代码实现? 如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么? Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的? Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?如何动态增加和删除一个节点? 了解什么是 Redis 的雪崩和穿透?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透? 如何保证缓存与数据库的双写一致性? Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗? 生产环境中的 Redis 是怎么部署的? 分库分表 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的? 现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上? 如何设计可以动态扩容缩容的分库分表方案? 分库分表之后,id 主键如何处理? 读写分离 如何实现 MySQL 的读写分离?MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题? 高并发系统 如何设计一个高并发系统? 分布式系统 系统拆分 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 Dubbo 可以吗? 分布式服务框架 说一下 Dubbo 的工作原理?注册中心挂了可以继续通信吗? Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的? Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢? Dubbo 的 spi 思想是什么? 如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试? 分布式服务接口的幂等性如何设计(比如不能重复扣款)? 分布式服务接口请求的顺序性如何保证? 如何自己设计一个类似 Dubbo 的 rpc 框架? 分布式锁 Zookeeper 都有哪些应用场景? 使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗?以上两种分布式锁的实现方式哪种效率比较高? 分布式事务 分布式事务了解吗?你们如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证? 分布式会话 集群部署时的分布式 Session 如何实现? 高可用架构 Hystrix 介绍 电商网站详情页系统架构 高可用系统 如何设计一个高可用系统? 限流 如何限流?在工作中是怎么做的?说一下具体的实现? 熔断 如何进行熔断? 熔断框架都有哪些?具体实现原理知道吗? 降级 需要获取答案的亲们可以加架构交流学习群获取噢 点击:加入JAVA架构学习交流群:614478470 如何进行降级? ​ 高并发架构 消息队列 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点? 如何保证消息队列的高可用? 如何保证消息不被重复消费?(如何保证消息消费时的幂等性) 如何保证消息的可靠性传输?(如何处理消息丢失的问题) 如何保证消息的顺序性? 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决? 如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。 搜索引擎 es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)? es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片? 需要获取答案的亲们可以加架构交流学习群获取噢 点击:加入JAVA架构学习交流群:614478470 缓存 在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果? Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多? Redis 都有哪些数据类型?分别在哪些场景下使用比较合适? Redis 的过期策略都有哪些?手写一下 LRU 代码实现? 如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么? Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的? Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?如何动态增加和删除一个节点? 了解什么是 Redis 的雪崩和穿透?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透? 如何保证缓存与数据库的双写一致性? Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗? 生产环境中的 Redis 是怎么部署的? 分库分表 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的? 现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上? 如何设计可以动态扩容缩容的分库分表方案? 分库分表之后,id 主键如何处理? 读写分离 如何实现 MySQL 的读写分离?MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题? 高并发系统 如何设计一个高并发系统? 需要获取答案的亲们可以加架构交流学习群获取噢 点击:加入JAVA架构学习交流群:614478470 分布式系统 系统拆分 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 Dubbo 可以吗? 分布式服务框架 说一下 Dubbo 的工作原理?注册中心挂了可以继续通信吗? Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的? Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢? Dubbo 的 spi 思想是什么? 如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试? 分布式服务接口的幂等性如何设计(比如不能重复扣款)? 分布式服务接口请求的顺序性如何保证? 如何自己设计一个类似 Dubbo 的 rpc 框架? 分布式锁 Zookeeper 都有哪些应用场景? 使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗?以上两种分布式锁的实现方式哪种效率比较高? 分布式事务 分布式事务了解吗?你们如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证? 分布式会话 集群部署时的分布式 Session 如何实现? 需要获取答案的亲们可以加架构交流学习群获取噢 点击:加入JAVA架构学习交流群:614478470 高可用架构 Hystrix 介绍 电商网站详情页系统架构 高可用系统 如何设计一个高可用系统? 限流 如何限流?在工作中是怎么做的?说一下具体的实现? 熔断 如何进行熔断? 熔断框架都有哪些?具体实现原理知道吗? 降级 如何进行降级?

优秀的个人博客,低调大师

程序媛成长纪:从DBA到研发工程师

编者按:某日于X信偶遇张亮兄弟,已经跳槽到某东了。且开源项目Sharding-Sphere风声水起。开源这件事,做一年不难,难得的是持续投入和品质,包括生态的养成。为了表达对于开源项目的支持,收录张亮兄弟女弟子潘娟投稿一篇,作为程序媛可能获得某些优待如(妹子独有的沟通优势又能推动项目推广、与启荣老板畅谈人生),但仍然要经历无数的虐(P1级故障、投诉、争吵与被尊重)、无数的跨越式成长(数据库、运维、分布式技术...),成功没有捷径...... 十一的北京秋高气爽,坐在地铁上写下这些故事,愿与你产生共鸣,与我总结后,继续战斗。 起于DBA 契机 诚实讲,我一直不清楚自己想做什么。于是,研究生临近毕业,麻木游离在各大公司的面试中。感谢和启荣(刘启荣,现京东金融运维副总监)的相遇,让我开启了DBA的航程。启荣老大是个高情商、接地气的老板。我是第一次遇到面试谈人生问题,不告诉面试结果,一言不合就让我来听他讲课的面试官。当时他讲到的数据库与DBA的世界,以及那种自由又充满生机的互联网交流氛围,让我意识到有些人是与众不同的,有些地方是心之所向的。 日常 DBA的工作是严谨、有趣、辛苦的。一个初出茅庐的丫头,突然闯入一个全新数据库世界,又空降在京东这样量级的平台上,所谓的数据库技术、业务架构、系统的视野与互联网的眼界,就像山呼海啸一样奔腾而来,以至于产生了一种真的扛不住的无力感。但是,为我抉择的负责,为大家给予我信任的回报,持有这样心理的我,开始疯狂地像海绵一样吸收着这海洋般的知识,并不断提升着自己的认知。一整年的周末都躲到公司无人的会议室啃着《MySQL技术内幕:innodb存储引擎》、《高性能MySQL》、工作笔记、Shell编程技术,去培养自己的数据库知识及运维技能。因为我知道,当一个人没有足够实力的时候,只有时间和努力才能让她蜕变,以及获得别人的尊重。 作为组里唯一的妹子,感谢他们只是把我当汉子用,而不是当牲口用。很多夜间运维的活儿尽量不给我。不过我真心觉得,只有这些真刀真枪的工作才能见识真正的战场,只有这样的战场才能让战士迅速成长。所以我投入了这无尽的战斗中,看到过凌晨3点的月亮,也哭诉过整夜迁移无尽头的折磨和无奈。而第一次失误导致用户收到乱码短息、被投诉造成P1级别(最高P0)故障时,也终于知道什么叫电话被领导打爆。一个人自责地在冬天回龙观的大街上嚎啕大哭,不知所措,着急地想抽自己两嘴巴子!现在觉得,那场景非常类似电影里小姑娘被男朋友甩了的经典剧情。不过那种疼到骨子里的自责确实让我真切地感受到生产环境的重要性,以及DBA工作的极尽严谨,我输入的一条命令背后是千千万万与业务紧密相关的数据,是无数用户的使用与体验。好吧,更是我甩给老板的锅和整个部门战友们的KPI。感谢那一次次让我头破血流的南墙,因为它让我知道了做事的深浅与尺度,让我拥有了能够面对更大挑战的勇气和力量。 总结 这段时间让我成长为一个合格的DBA。除了掌握数据库知识体系及周围生态外,还积累了大规模数据库运维经验。此外,所谓的风险意识、快狠准和粗中有细的运维意识也开始慢慢建立。但我觉得有两个能力非常重要,那就是:作为下属对上级命令的绝对执行力,以及面对严苛环境的抗击打能力。 承于DevOps 契机 人工运维以及脚本运维已经无法满足激增的业务发展,对数据库运维要求出现多元化、多维度的需求。同时运维的边际效益日益凸显,于是整个运维部门开始向DevOps转变。而当时负责数据库工单系统自动化平台建设的前辈突然被借调,于是该项目基本停滞。那时,我心里小恶魔非常想让我主动请缨负责这个项目,但当时的我并没有多少项目开发经验,人微言轻。可是,依据当时部门发展风向,自动化是大势所趋,只有顺势而为,才能有机会获得大家的认可和肯定,此时若主动出击,便有可能危中求机。再静心分析,前期积累的大规模数据库运维经验,可以让我理解这个项目的核心需求和期望,而曾经和研发及运维同事的交往基础、妹子独有的沟通优势又能推动项目推广。于是在得到欢哥(周欢,现网联数据库负责人)鼓励和授权后,开始动手!正如那句话所说:并不是所有的比赛,都能允许你做好十足的准备。面对危机,有时候尝试放手一搏,可能会带来希望和转机。 日常 没有Python经验,我就死啃Python开发,并换工位到组里Python大神旁边,方便随时请教。大半年的时间基本处于封闭开发状态,实行小步迭代的敏捷开发方针。在地铁上分析需求、设计方案、构思代码。在公司跟老板明确需求、开发功能、解决Bug。周末则利用业务低谷,进行上线测试。此外,还要跨部门合作和推广。刚开始的时候,工作推动很难有进展。因为别人根本不听你说什么,任你焦急、愤怒,全都无济于事。越是想着如何说服对方,越只能得到升级版的争吵。后来渐渐意识到,不要尝试与他人争对错,因为根本没有对错。如何通过协商、退让达到双方共赢、双方满意的目的才是王道。同时,启荣哥告诉我互联网的三不要精神:不要钱、不要脸、不要命,我觉得很有道理。在一次次的沟通和打脸后,信任逐渐被建立起来了。对方尊重你,是尊重你的付出,尊重你的能力,尊重双方的利益。最终,数据库工单平均执行效率提高70%、非法工单拦截率为30%、工单正确执行率保持在99.99%的报告终于为这大半年的付出画上圆满的句号。 总结 这个阶段依据部门风向,从运维DBA转向数据库运维开发DBA,积累了项目开发经验,未卜先知的情况下,竟为后续转行打下基础。此外,跨部门沟通合作、推广也让我懂得了要学会选择和衡量、共赢与合作,并保持乐观平和的心态。 转于JAVA 契机 数据库自动化工单平台已取代人肉工单操作,发展趋于平稳,同时深感自己的圈子和视界太狭隘。就在这样浑水摸鱼的时候,启荣老板给我介绍了新的男神:张亮,原当当架构部负责人,热爱开源,怀揣着将Sharding-Sphere打造为业界一流的金融级开源分布式数据库中间件的梦想加入了京东金融。可能考虑到我DBA的知识积累和研究生英语水平,当然最重要的是我不要脸的人美心善。所以,让我协助亮哥将Sharding-Sphere官档翻译成英文。开源、数据库中间件、微服务、分布式事务、数据库治理……一大堆新鲜的名词冲进我贫困的大脑,打开了更广阔世界的天窗,并对我产生强大吸引力。此外,当时平滑的成长曲线让我迫切想打开自己狭隘视野的枷锁。于是,我开始仔细分析现状:开源、分布式、微服务、Java开发等对我来说又是个全新领域,转行可能将抛弃部分积累的数据库行业积淀。不过,这些数据库运维经验,对全是Java开发以及架构出身的团队来讲,未尝不是一种互补的优势。同时,前期数据库自动化工单平台项目也能帮我做跨行的平滑过渡。思及此时,我终于跟启荣探讨了人生问题和情感问题,并转向了金融级开源分布式数据库中间件Sharding-Sphere的开发。 日常 前期对官档的翻译工作,让我对Sharding-Sphere的核心功能,产品定位有了比较全面的理论层面认识。于是开始从源码层面入手,修改小的Bug,编写测试用例,到后来负责一整块的内核功能。在亮哥的指导下不断深入Sharding-Sphere,并对编码又了新的理解。它绝对不是故步自封,随心所欲地编写,而是存在规则和逻辑的简洁优雅编码之道以及重构迭代的价值意义。函数与函数之间的空行、段首多少空格、变量名字命名这些在常人眼里无足轻重的事情都会被亮哥格外重视,他对设计和代码120%的要求让我对细节有了100%的注重。从GitHub代码提交记录可以看出整个变化的步伐,从平缓的小步改造,到后期的模块开发(见下图)。坐在工位上看似发呆地进行思考设计、逻辑整理。获得对整套业务逻辑的深刻理解,便觉得酣畅淋漓;通过DBA视觉和亮哥交流需求,得到新的启示和想法,便觉得颇有意义;而更多时候是一个人进入所谓的”心流”,将脑子里勾画出架构用代码去渐渐实现,那种忘记周遭,沉迷于代码与音乐世界,又让人感觉时光飞逝。当真正想做一件事情、对其充满兴趣的时候,才会知道什么叫乐此不疲。 此外,也开始逐渐走向台前,对外分享,建立影响力。通过认识大牛,同样开阔了自己的眼界并培养行业灵敏度。京东在线平台的分享扩大了Sharding-Sphere内部影响力;参加火币、饿了么、贝壳金服的交流分享则了解大家对数据库中间件的认识和需求;担任2018ODF数据库大会的主持,重新看到数据库的行业发展;担任ServiceComb交流活动的主持,则能感受到开源的力量。一次次活动经验,也是一次次小小的积淀,慢慢让自己懂得了分享的价值,并建立对外影响力。感谢各位大牛的提携之恩,也感谢启荣总,亮哥给予的一次次分享交流的机会。其实,每个人都有自己独特的优势,多多分析总结,因地制宜,合理运用,才有可能百尺竿头更进一步。 部分分享照片 总结 这一阶段对内低头磨炼开发之道以及学习架构重构,并了解开源、分布式、中间件的架构体系。对外积极交流分享,培养行业影响力,锻炼表达能力。对时间自由掌控,对事情要求极致。 合于? 当下,仍需不断对所在行业的宽度、深度进行积累。在数据库中间件、DataBaseMesh、开源方面投入主要精力。在亮哥带领下将Sharding-Sphere做到理想高度(P.欢迎关注https://github.com/sharding-sphere!)。同时,也希望自己多思考,多磨砺下品性,把控前进方向,明确目标。然而现实很骨干,浅薄的我还在探索之中。对于未来,如果你的高度不足以支撑你当下的选择,不如借鉴下大牛和前辈的思考,站的在那个高度的他们的指点或许会给你打开新的天窗。 一路成长,总结其原因,我觉得主要有三大点。第一,感谢我上面提到的各位老板能给予我机会、能放权让我去做事情、能宽容我的傲慢与偏见;第二,感谢京东的大平台,能让我结识到这些大牛前辈,能让我看到不断变化进步的世界,并推动我不得不去自我提升;第三,则是感谢自己,懂得思考并及时按照发展调节方向,唯有全力以赴、放手一搏才能危中求机。 我会在这个领域走多远多高,我能拥怎样的生活,能写什么样的故事,又能和哪些人一路相伴?对于未来,现在的我也同样没有答案。只是,曾经一步步扎扎实实的探索确实让我有了更坚强的意志和勇气去面对必须要面对的现实。愿这一路的小小故事,能给正在阅读的你一些思考和想法,并引起你的共鸣。倘若如此,也不枉这个十一假期一次次的码字和修改,也不枉右军老师的邀请。我相信每个人都有自己的故事,每个人都是独特的你! 原文发布时间为:2018-10-18 本文作者:潘娟 本文来自云栖社区合作伙伴“技术琐话”,了解相关信息可以关注“技术琐话”。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册