由浅入深吃透 Docker
上次在拉钩买的《重学数据结构与算法》感觉讲的还不错,又碰到Docker的课打折,就顺便买了。。
然后主要就是记记笔记整理一下别人的经验用法啥的,这些命令啥的搜都能搜得到。
课程的二维码在最后
Docker 安装Docekr安装菜鸟教程有各种环境安装docker的方法
容器技术原理chroot
chroot 是在 Unix 和 Linux 系统的一个操作,针对正在运作的软件行程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由 chroot 设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。
NamespaceDocker 主要用到以下五种命名空间。
pid namespace:用于隔离进程 ID。
net namespace:隔离网络接口,在虚拟的 net namespace 内用户可以拥有自己独立的 IP、路由、端口等。
mnt namespace:文件系统挂载点隔离。
ipc namespace:信号量,消息队列和共享内存的隔离。
uts namespace:主机名和域名的隔离。
Cgroups
Cgroups ...
0-1背包问题
今天LeetCode的每日一题是分割等和子集,这道题可以看成是一个0-1背包问题。
只是分享一下自己理解的过程,可能表述并不是很清楚,公式的推导就不说了,网上有很多很专业的文章。
0-1背包问题关于背包问题的定义,网上有很多。
举个列子:
一个小偷拿了一个承重为10kg的背包去商店偷东西,有3种物品供他选择;第一种重1kg,价值6元;第二种重2kg价值10元;第三种重3kg,价值12元。不能重复拿同一种物品,请问小偷如何拿能获取最多的钱?
我们可以使用一个 表格分析一下:
dp[i][j]表示在前0~i种物品中挑选,组成重量为j的组合,最大价值是多少
行代表可选择的物品(1、2、3),列代表背包容量(kg),行列相交的值代表可以获取的最大价值(元)
i\j
0
1
2
3
4
5
{1} 0
0
6
6
6
6
6
{1,2} 1
0
6
10
16
16
16
{1,2,3} 2
0
6
10
12
18
22
假设物品种类为n,背包重量为target,将表格转换为一个二维数组dp,
那么最大价值为 dp[n-1][target] = 22
代码 ...
koa-compose原理
koa是一个很优秀的轻量级web框架,一般我自己写个小东西都会用它。
它的中间件执行顺序就和一个洋葱一样,所以被称为洋葱模型,但是一直不知道它的原理是什么,有时间就看了一下。
中间件的注册koa中注册很简单,使用app.use(xxx)就可以注册一个中间件。
源码如下:
123456789101112use(fn) { if (typeof fn !== 'function') throw new TypeError('middleware must be a function!'); if (isGeneratorFunction(fn)) { deprecate('Support for generators will be removed in v3. ' + 'See the documentation for examples of how to convert old middleware ' + ' ...
吐槽一下javascript
最近在熟悉新公司的一些基础服务和核心库的代码,说真的想吐槽一下JavaScript了,风格太灵活多变了,一样的操作可以用n多种方式或者语法实现,读代码太痛苦了。。
这不是上次面腾讯被问到defineProperty这种定义属性的方式和普通的. 操作有什么不同,刚好想起来我就搜了一下,给我惊到了。。
JavaScript对象属性定义JavaScript文档
如何理解Object.defineProperty()?
基本的语法和操作没什么好说的。
除了defineProperty之外,还有defineProperties、getOwnPropertyDescriptor、getOwnPropertyDescriptors等配套的方法。
defineProperty和.操作的区别原来区别还真的挺大的。。
通过点操作符定义的属性,writable,configurable,enumerable值都为true,value为赋入的值
通过Object.defineProperty只指定value的属性,writable,configurable,enumerable值都为false
...
koa源码之delegates
最近看koa的源码,看到了了一个TJ大神写的包delegates,实现了委托模式/代理模式。
当前包的版本为1.0.0,代码就100多行,周下载量一千两百多万。。果然是巨佬。
基本结构目录结构很简单,主要文件只有一个index.js和test文件夹下的单元测试。
index.js文件的内容:
Delegator:构造方法
Delegator.auto:自动委托所有可以委托的属性
Delegator.prototype.method:委托一个方法
Delegator.prototype.getter:委托属性的getter方法
Delegator.prototype.setter:委托属性的setter方法
Delegator.prototype.access: 同时委托属性的getter和setter方法
Delegator.prototype.fluent:委托属性,实现jQuery风格,不传参数获取属性值,传参修改属性值。
ps: 在koa源码中,使用的也是delegates的1.0.0的包,但是index.js中没有找到auto这个方法。
举例和实现构造方法1234 ...
记录一次腾讯的面试
说起来挺魔幻的,事情起因这样滴。。
五六月份的时候,西安腾讯云子公司在boss上找我要了一份简历,给我安排了面试。
一面主要问了下项目,es6的语法,设计模式等等。。其实不是很难,只是那时候没有准备,现在去应该能过一面。。
然后前几天,成都腾讯企业微信组的hr找我(捂脸),说在简历库看到我的简历,让我去面试,我也没多想,反正就当积累经验了。
然后开始了痛苦的三个多小时。。。(下面除了算法题我琢磨出了答案,其他的只是个大纲,作为以后学习的方向)
自我介绍上来面试官小哥哥先自己我介绍了一下,然后我大概说了一下自己的姓名,什么时候毕业,几份工作的起止时间和主要做的事。
算法题在腾讯会议的聊天窗口发给我了一个链接,点开后是一个实时同步的代码编辑器。
第一次遇到这种面试,人有点懵,原来子公司和总公司难度差距这么大奥。。
虽然我算法很渣,但题还是要做的嘛。
原题放在github上了
四十五分钟两道题,结果时间超了,第一条我做出来了80%吧,后面大佬诱导我找到了正确答案。
第二题就简单说了一下思路,但是都不对。首先,用随机数随机,放进数据被pass了,如果随机数范围不变,会有两个元素随机到一个 ...
面经2020
面经放一起吧,做一个汇总吧
A今天面了一家做车联网的公司。技术的问题没什么难度,他们也没用mysql,redis这种常用的数据库,用的是其它的nosql。
我不太了解的问题主要有三个吧。随便记录一下。
有用过什么云服务?云服务这块我过得就是云存储(oss),然后vps(自己搭小飞机用的),不过这种东西只要能看懂api文档。上手没什么难度吧。
serverless架构有什么了解?我之前在cnode论坛上看到过别人讨论这个来着,还专门去看了下,但是这种烧钱的架构暂时没用上就没往深去看。。
下面是知乎找的一些基本概念,参考链接
**核心思想**
用户无需关注支撑应用服务运行的底层主机。
无服务并不是说基于 Serverless 架构的软件应用不需要服务器就可以运行,其指的是用户无须关心软件应用运行涉及的底层服务器的状态、资源(比如 CPU、内存、磁盘及网络)及数量。
**优势**
提高应用交付的效率,降低应用运营的工作量和成本。
**劣势**
emm...应该是贵吧。。毕竟服务器资源都是钱嘛。。
控制力:用户对底层的计算资源没有控制力。
可移植性:不同IT厂商的 Serverle ...
流式查询mysql
简单记录一下,使用node的流读取mysql数据,解决分页扫表慢的问题。
场景有一个计算任务,需要逐条扫描一张大表里的符合条件的数据,并且做一些简单的计算插入一张小表中去,类似select * from tableA where condition > 1。假设符合条件的数据有1000w条,使用分页,每页1000条,逐页查询并计算完插入小表。
瓶颈mysql分页的特性。。就是越往后越慢,晚上计算任务又多,很容易跑不完或者挂掉。哪怕优化了分页,效果还是不如意。
解决方案我们用的 knex.js,不能算是orm,只能算是一个sql builder吧。
使用knex的stream创建一个流,然后使用node的流事件.on('data')监听这个流,每查询一条数据都会触发流事件。
这里只是提供了一个思路,上代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758'use strict'; ...
ES6之函数的扩展
函数参数的默认值基本用法es6之前函数的参数不能使用默认值,只能采取这种写法:
12345function a(x){ x=x||1; // x的默认值为1 console.log(x);}a(); // 1
但是es6可以为函数的参数设置默认值:
1234function a(x = 1){ console.log(x);}a(); // 1
不能有重复参数:
非严格模式下,重复参数不会报错:
1234function a(x, x, y) { console.log(x, x, y)}a(1, 2, 3); // 2 2 3
但是严格模式或者使用参数默认值时,不能使用这种写法:
123456789101112'use strict'function a(x, x, y) { console.log(x, x, y)}a(1, 2, 3); // Duplicate parameter name not allowed in this context// 或者funct ...
elasticsearch初踩坑
大概说一下前段时间用elasticsearch遇到的几个坑
es版本为7.7.1
原始需求千万级会员,三个条件模糊搜索(左匹配),使用mysql大概要30多秒,因为体验太差所以考虑用es做优化。
实际上,这种需求并不是es主要针对的场景,但是用也可以用,效果也不错,同样的搜索条件0-3s。因为最终结果会比mysql少一些数据,所以在准确率95-99%之间,在我们可以接受的范围之内。
遇到坑和问题文档不准确es版本更新快,官网的入门教程还是基于es2.0写的,用的时候遇到许多语法不支持,所以只能去看对应版本英文文档。包括网上的一些教程、博文的版本都各不相同。
解决方案:
没有办法。。。更新太快导致官放教程都没维护,入门的话就只能对比着对应版本的英文文档看了,只能多踩一些坑。
索引的映射类型type失效官方解释:
在Elasticsearch6.0.0或者或者更新版本中创建的索引只会包含一个映射类型(mappingtype). 在5.x中创建的具有多个映射类型的索引在Elasticsearch6.x中依然会正常工作。在Elasticsearch7.0.0中,映射类型将会被完全移除。
解决方 ...