【系统软件工程师面试】7. 消息队列

摘要: 问:如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。 更多面试题:面试题内容聚合 面试题剖析 我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是 阅读全文
posted @ 2020-12-23 22:16 ym65536 阅读(61) 评论(0) 推荐(0) 编辑

【ToDo】存储设计概述

摘要: 块存储、文件存储、对象存储: 这三者区别其实主要是访问接口上的。 不是特别准确的简化说法: 块存储给你就是一块未格式化的硬盘分区。文件存储就是给你一个格式化过的硬盘分区(可能是本地也可以是网络上的)。 对象存储给你的是一个存非结构化数据键值数据库。 作者:吴镝链接:https://www.zhihu 阅读全文
posted @ 2020-12-13 18:19 ym65536 阅读(146) 评论(0) 推荐(0) 编辑

Arthas: Java 动态追踪技术

摘要: 引子 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话: “Debug一下吧。” “线上机器,没开Debug端口。” “看日志,看看请求值和返回值分别是什么?” “那段代码没打印日志。” “改代码,加日志,重新发布一次。” 阅读全文
posted @ 2020-10-27 00:49 ym65536 阅读(700) 评论(0) 推荐(0) 编辑

MySQL InnoDB 存储引擎

摘要: https://zhuanlan.zhihu.com/p/103487968 对于 MySQL,要记住、或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图: MySQL 架构 另一张则是 InnoDB 架构图: innodb-architecture 遇到问题,或者学习到新知识点时, 阅读全文
posted @ 2020-10-07 23:51 ym65536 阅读(140) 评论(0) 推荐(0) 编辑

JVM 内存布局及 GC 原理

摘要: “java 的内存布局以及 GC 原理”是 java 开发人员绕不开的话题,也是面试中常见的高频问题之一。 java 发展历史上出现过很多垃圾回收器,各有各的适应场景,很多网上的旧文章已经跟不上最新的变化。本文详细介绍了 java 的内存布局以及各种垃圾回收器的原理(包括最新的 ZGC),希望阅读完 阅读全文
posted @ 2020-08-02 20:55 ym65536 阅读(144) 评论(0) 推荐(0) 编辑

[netty] 0.Java NIO 原理

摘要: 主要参考:http://tutorials.jenkov.com/java-nio/buffers.html 一、Java NIO Buffer Java NIO Buffers are used when interacting with NIO Channels. As you know, da 阅读全文
posted @ 2020-06-21 12:26 ym65536 阅读(230) 评论(0) 推荐(0) 编辑

[netty] 1. 原理入门

摘要: 1、引言 Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。 本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目方面提供参考。 本文作者的另两 阅读全文
posted @ 2020-06-17 09:25 ym65536 阅读(104) 评论(0) 推荐(0) 编辑

[SpringBoot] Spring 的事件发布监听机制

摘要: 1. 什么是事件监听机制 在讲解事件监听机制前,我们先回顾下设计模式中的观察者模式,因为事件监听机制可以说是在典型观察者模式基础上的进一步抽象和改进。我们可以在 JDK 或者各种开源框架比如 Spring 中看到它的身影,从这个意义上说,事件监听机制也可以看做一种对传统观察者模式的具体实现,不同的框 阅读全文
posted @ 2020-06-07 15:41 ym65536 阅读(516) 评论(0) 推荐(0) 编辑

[Java工程实践] Lambda和Stream

摘要: Lambda: 什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”。 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量: 在Java 8之前,这个是做不到的。但是Java 8问世之后, 阅读全文
posted @ 2020-05-14 14:26 ym65536 阅读(337) 评论(0) 推荐(0) 编辑

[SpringBoot] SpringApplication.run 执行流程

摘要: 作者:王奕然链接:https://www.zhihu.com/question/21346206/answer/101789659来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 建议不要硬着头皮看spring代码,本身的代码800多m,就是不上班开始看也不知道什么时候 阅读全文
posted @ 2020-05-05 22:23 ym65536 阅读(1809) 评论(0) 推荐(0) 编辑

[SpringBoot] 流水账~

摘要: 1. spring-boot-starter-parent 你的项目pom.xml文件中,应该存在如下代码: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</ar 阅读全文
posted @ 2020-05-05 19:14 ym65536 阅读(227) 评论(0) 推荐(0) 编辑

[Java工程实践] Maven使用

摘要: 作者:wuxinliulei链接:https://www.zhihu.com/question/20104186/answer/73797359来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 1. 前言 Maven是apache的一个顶级项目,它的出现越来越影响着现在 阅读全文
posted @ 2020-05-05 17:28 ym65536 阅读(186) 评论(0) 推荐(0) 编辑

[Java工程实践] 反射

摘要: 一、什么是反射 作者:老玩童周伯通链接:https://www.zhihu.com/question/24304289/answer/147529485来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 写答案,可能会有默认知识现象,就是有些知识点,我知道,但你不知道,可 阅读全文
posted @ 2020-05-05 10:59 ym65536 阅读(298) 评论(0) 推荐(0) 编辑

[Java工程实践] 注解

摘要: 三、注解 注解,和反射一样,是Java中最重要却最容易被人遗忘的知识点。哪怕Spring、SpringMVC、SpringBoot等框架中充满了注解,我们还是选择性地忽视它。很多人不明白它是怎么起作用的,甚至有人把它和注释混淆...工作中也只是机械性地在Controller上加@RequestMap 阅读全文
posted @ 2020-05-05 10:56 ym65536 阅读(167) 评论(0) 推荐(0) 编辑

[SpringBoot] 2. SpringBoot原理分析

摘要: 预警:本文非常长,建议先 mark 后看,也许是最后一次写这么长的文章 说明:前面有 4 个小节关于 Spring 的基础知识,分别是:IOC 容器、JavaConfig、事件监听、SpringFactoriesLoader 详解,它们占据了本文的大部分内容,虽然它们之间可能没有太多的联系,但这些知 阅读全文
posted @ 2020-05-05 01:25 ym65536 阅读(294) 评论(0) 推荐(0) 编辑

[Java工程实践] 1.Java常用概念:Bean

摘要: 一、Java Bean基本概念: 1、所有属性为private2、提供默认构造方法3、提供getter和setter4、实现serializable接口 作者:杨博链接:https://www.zhihu.com/question/19773379/answer/31625054来源:知乎著作权归作 阅读全文
posted @ 2020-05-02 18:03 ym65536 阅读(273) 评论(0) 推荐(0) 编辑

[系统软件工程师面试] 6. mysql

摘要: 1. Mysql内核 MyISAM和InnoDB内核选型 1. InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一; 2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 M 阅读全文
posted @ 2020-02-21 02:04 ym65536 阅读(176) 评论(0) 推荐(0) 编辑

[系统软件工程师面试] 5. redis

摘要: 一、单机部分 1、redis优点 1.1 redis为什么这么快? 纯内存操作 单线程操作,避免了频繁的上下文切换 采用了非阻塞 I/O 多路复用机制 1.2 线程模型 Redis-client 在操作的时候,会产生具有不同事件类型的 Socket。在服务端,有一段 I/O 多路复用程序,将其置入队 阅读全文
posted @ 2020-02-16 13:24 ym65536 阅读(205) 评论(0) 推荐(0) 编辑

【系统软件工程师面试】4. 算法(leetcode刷题)

摘要: 算法部分(leetcode刷题) 作者:穷码农链接:https://www.zhihu.com/question/36738189/answer/908664455 开篇的话:LeetCode题目太多,且其中的基本知识点其实是变化不大的,因此全部刷完肯定不是最好最有效的方式。短时间刷不完也记不住。所 阅读全文
posted @ 2019-10-20 11:24 ym65536 阅读(423) 评论(0) 推荐(0) 编辑

【系统软件工程师面试】3. os部分

摘要: 操作系统 0、系统调用 系统调用是从一个应用程序到内核的函数调用,出于安全考虑,它们使用了特定的机制,实际上你只是调用了内核的 API。“ 系统调用(system call)” linux系统调用时为什么需要内核栈,不直接使用用户栈? 避免高特权(比如 内核态)栈内存不被低特权(比如 用户态)任意修 阅读全文
posted @ 2019-10-20 11:20 ym65536 阅读(335) 评论(0) 推荐(0) 编辑

【系统软件工程师面试】2. 网络部分

摘要: 网络部分 1、tcp/udp区别 1、基于连接与无连接; 2、流模式与数据报模式 ; 3、TCP保证数据正确性,UDP可能丢包; 4、TCP保证数据顺序,UDP不保证。 2、tcp 三次握手/ connect/ accept 关系, read返回0 3、select/ epoll ET/LT 在一个 阅读全文
posted @ 2019-10-20 11:18 ym65536 阅读(276) 评论(0) 推荐(0) 编辑

【zz】面试鹅厂

摘要: 经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次出征。 经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次出征。 经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次出征。 鹅厂 面试职位:g 阅读全文
posted @ 2019-10-20 00:21 ym65536 阅读(151) 评论(0) 推荐(0) 编辑

[leveldb] Recover

摘要: DBImpl::Recover 把数据库恢复到上次退出的状态,Recover的基本功能:如果存在表数据,则Load表数据,并对日志进行恢复,否则,根据flag创建新表或者返回错误 Recover的基本流程是:首先是处理创建flag,比如存在就返回失败等等;然后是尝试从已存在的sstable文件恢复d 阅读全文
posted @ 2019-09-09 23:41 ym65536 阅读(293) 评论(0) 推荐(0) 编辑

[levelDB] Version Manager

摘要: 一、作用 LevelDB如何能够知道每一层有哪些SST文件;如何快速的定位某条数据所在的SST文件;重启后又是如何恢复到之前的状态的,等等这些关键的问题都需要依赖元信息管理模块。对其维护的信息及所起的作用简要概括如下: 记录Compaction相关信息,使得Compaction过程能在需要的时候被触 阅读全文
posted @ 2019-07-21 23:36 ym65536 阅读(366) 评论(0) 推荐(0) 编辑

[levelDB] Compaction

摘要: 一、原理分析 前文有述,对于LevelDb来说,写入记录操作很简单,删除记录仅仅写入一个删除标记就算完事,但是读取记录比较复杂,需要在内存以及各个层级文件中依照新鲜程度依次查找,代价很高。为了加快读取速度,levelDb采取了compaction的方式来对已有的记录进行整理压缩,通过这种方式,来删除 阅读全文
posted @ 2019-06-09 21:56 ym65536 阅读(1613) 评论(0) 推荐(0) 编辑

<Effective Modern C++> 读书笔记

摘要: // To Do https://blog.csdn.net/zhangyifei216/article/details/72868345 阅读全文
posted @ 2019-03-10 16:29 ym65536 阅读(100) 评论(0) 推荐(0) 编辑

<Effective Modern C++> 笔记-1-Deducing Type

摘要: C++类型推断 对于静态语言来说,你一般要明确告诉编译器变量或者表达式的类型。但是庆幸地是,现在C++已经引入了自动类型推断:编译器可以自动推断出类型。在C++11之前,类型推断只是用在模板上。而C++11通过引入两个关键字auto和decltype扩展了类型推断的应用。C++14更进一步扩展了au 阅读全文
posted @ 2019-03-10 15:57 ym65536 阅读(314) 评论(0) 推荐(0) 编辑

水塘抽样(Reservoir Sampling)问题

摘要: 水塘抽样是一系列的随机算法,其目的在于从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况。 在高德纳的计算机程序设计艺术中,有如下问题:可否在一未知大小的集合中,随机取出一元素?。或者是Google面试题: I have a linke 阅读全文
posted @ 2019-03-03 14:44 ym65536 阅读(186) 评论(0) 推荐(0) 编辑

【C++工程实践】条件变量

摘要: 1、linux条件变量简介 先看看linux下条件变量的api: 1 #include <pthread.h> 2 int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); 3 int pthread_cond_sign 阅读全文
posted @ 2018-09-03 01:19 ym65536 阅读(260) 评论(0) 推荐(0) 编辑

【c++工程实践】内存模型

摘要: 0.文章内容简介 这篇文章主要来讨论C++对象在内存中的布局,属于第二个概念的研究范畴。而C++直接支持面向对象程序设计部分则不多讲。文章主要内容如下: 虚函数表解析。含有虚函数或其父类含有虚函数的类,编译器都会为其添加一个虚函数表,vptr,先了解虚函数表的构成,有助对C++对象模型的理解。 虚基 阅读全文
posted @ 2018-07-08 12:34 ym65536 阅读(215) 评论(0) 推荐(0) 编辑

【c++工程实践】智能指针

摘要: 一、智能指针简介 a smart pointer is an abstract data type that simulates a pointer while providing added features, such as automatic memory management or boun 阅读全文
posted @ 2018-07-01 17:56 ym65536 阅读(287) 评论(0) 推荐(0) 编辑

【c++工程实践】值语义与右值引用

摘要: 一、值语义 值语义(value sematics)指的是对象的拷贝与原对象无关,C++ 的内置类型(bool/int/double/char)都是值语义,标准库里的 complex<> 、pair<>、vector<>、map<>、string 等等类型也都是值语意,拷贝之后就与原对象脱离关系。对一 阅读全文
posted @ 2018-06-19 21:36 ym65536 阅读(221) 评论(0) 推荐(0) 编辑

分布式系统原理-CAP/2PC/3PC

摘要: 1、CAP理论 CAP是分布式系统、特别是分布式存储领域中被讨论最多的理论,“什么是CAP定理?”在Quora 分布式系统分类下排名 FAQ 的 No.1。CAP在程序员中也有较广的普及,它不仅仅是“C、A、P不能同时满足,最多只能3选2”,以下尝试综合各方观点,从发展历史、工程实践等角度讲述CAP 阅读全文
posted @ 2018-06-10 15:58 ym65536 阅读(551) 评论(0) 推荐(0) 编辑

[转载]容易被误读的IOSTAT

摘要: http://linuxperf.com/?p=156 容易被误读的IOSTAT 2016/11/29 VMUNIX iostat(1)是在Linux系统上查看I/O性能最基本的工具,然而对于那些熟悉其它UNIX系统的人来说它是很容易被误读的。比如在HP-UX上 avserv(相当于Linux上的 阅读全文
posted @ 2018-05-16 11:37 ym65536 阅读(149) 评论(0) 推荐(0) 编辑

Bloom filter(布隆过滤器)概念与原理

摘要: https://en.wikipedia.org/wiki/Bloom_filter https://en.wikipedia.org/wiki/Bloom_filter 写在前面 在大数据与云计算发展的时代,我们经常会碰到这样的问题。我们是否能高效的判断一个用户是否访问过某网站的主页(每天访问量上 阅读全文
posted @ 2018-04-29 19:31 ym65536 阅读(851) 评论(0) 推荐(0) 编辑

【转载】c++对象模型:内存布局

摘要: 图说C++对象模型:对象内存布局详解 阅读目录 0.前言 1.何为C++对象模型? 2.文章内容简介 3.理解虚函数表 3.1.多态与虚表 3.2.使用指针访问虚表 4.对象模型概述 4.1.简单对象模型 4.2.表格驱动模型 4.3.非继承下的C++对象模型 5.继承下的C++对象模型 5.1.单 阅读全文
posted @ 2018-04-06 10:38 ym65536 阅读(368) 评论(0) 推荐(0) 编辑

【转载】Linux内存管理

摘要: 一、前言二、简单的内存管理器示例三、GNU malloc算法四、Kernel Buddy伙伴系统算法五、Kernel Slab/Slub高速缓存算法 一、前言 这次课程最初的题目叫《linux内存管理》, 可是写着写着就感觉这个题目起的太大了, VM(virtul memory)是操作系统中最抽象最 阅读全文
posted @ 2018-04-06 09:48 ym65536 阅读(264) 评论(0) 推荐(0) 编辑

【系统软件工程师面试】1. C++部分

摘要: C++分为写库(C run time,STL,还有比如那个gaylib)的和写应用程序的。绝大多数“精通C++”的需求都来自于写库。写库这种事不是绝大多数正常人类能够完成的,所以你也不用操心。对于写应用程序的来说,极多数的语言特性其实都不需要掌握。绝大多数时候你只需要: 知道坑在哪儿,不要掉坑(Ef 阅读全文
posted @ 2018-03-06 01:51 ym65536 阅读(806) 评论(0) 推荐(0) 编辑

硬盘SMART检测参数详解[转]

摘要: 一、SMART概述 要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了。诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬件崩溃造成数据丢失所花费的代价却是相当可观的,特别是在用户从来没有提前考虑过在这些情况下的应对措施时。 硬盘的故障一般分为两种:可预测 阅读全文
posted @ 2018-02-28 10:36 ym65536 阅读(2059) 评论(0) 推荐(0) 编辑

muduo日志库分析

摘要: 一、前言 在服务端编程中,日志是必不可少的。 开发过程中,日志的存在能方便我们调试错误和更好地理解程序;运行过程中,日志能帮助我们诊断系统故障并处理、记录系统运行状态。 二、muduo日志类封装细节 (1)日志消息有多种级别(level),如TRACE、DEBUG、INFO、WARN、ERROR、F 阅读全文
posted @ 2018-01-16 00:38 ym65536 阅读(1152) 评论(0) 推荐(1) 编辑