Dockerfile知识总结
使用Dockerfile 能够构建一个自定义镜像。通常情况下是将自己的应用打包成镜像,在容器中使用。
Dockerfile 命令
命令
作用
FROM
表示当前镜像是基于那个镜像
MAINTAINER
镜像的维护者和邮箱
RUN
构建镜像的时候需要运行的命令
EXPOSE
容器内对外暴露的端口
WORKDIR
指定创建容器后默认进入容器的工作目录
ENV
用来构建镜像过程中设置的环境变量 key=value
ADD
将宿主机下的文件拷贝到容器中,且会自动处理url和压缩包
COPY
类似于ADD,将从构建的Dockerfile目录中复制镜像的目录中
VOLUME
容器数据卷
CMD
制定一个容器运行的命令,如果有多个命令,只执行最后一个。会被docker run 后面的命令替代
ENTRYPOINT
指定一个容器启动时要运行的命令和参数,和CMD一样
1、FROM 命令语法123FROM <image>FROM <image>[:<tag>] # 设置镜 ...
MySQL索引问题
针对以上索引问题,首先要知道什么是主键索引、非主键索引、聚簇索引、非聚簇索引。
主键索引:即MySQL的索引,如果没有主键那么MySQl会自动在表中挑选一个唯一且非空的字段来当做主键索引,如果没有的话MySQL内部自己会创建一个ROW_ID来当做主键,也会建立主键索引。主键索引的叶子结点存储的是整行的数据。
非主键索引:即非主键以外的列建立的索引。非主键索引存储的是主键索引的值。
什么是索引回表?索引回表指的就是在查询某一列数据是判断条件为非主键索引,name查到这条复合条件的所有记录就需要在根据非主键索引获得的主键索引的值,在取主键索引的B+树中在此查询一次才能获取到全部的数据。例如:
12# ID 是主键索引 ,只需要一次查询就可以获取符合条件的全部记录。select * from ex_table where ID=1;
12# n 是非主键索引,查询到的结果是符合条件的主键索引的ID,所以还需要早根据主键的ID,再在主键索引的B+树上查询一次select * from ex_table where n = 5;
以上情况就是索引回表。
...
Redis底层原理
Redis 数据结构底层实现StringRedis 是由C实现的,所以Redis的String字符串是由C语言中的String改进而来的。
在C语言中,C的一个字符串是由数组组成的,”sdasd\0”,在C语言中一个字符串是由\0 结尾,但是在Redis中,String类型可以存储任意数据类型,所以使用\0结尾容易发生截断。所以在Redis中实现了一个简单动态字符串 (SDS > simple dynamic string)来存储数据。
SDS :他自定义了一个数据长度来代表数据的长度,在Redis 内部定义了多种 sdshdr5、sdshdr8、sdshdr16。
1234struct__attribute__ ((__packed__)) sdshdr5{ unsigned char flages; char buf[];}
123456struct__attribute__ ((__packed__)) sdshdr8{ uint8_t len; uint8_t alloc; unsigned char f ...
面试-Linux
Linux搬运自掘金用户:小杰要吃蛋 [侵删]
什么是Linux
Linux是一套免费使用和自由传播的类似Unix操作系统,一般的WEB项目都是部署都是放在Linux操作系统上面。 Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Windows和Linux的区别
Windows是微软开发的操作系统,民用操作系统,可用于娱乐、影音、上网。 Windows操作系统具有强大的日志记录系统和强大的桌面应用。好处是它可以帮我们实现非常多绚丽多彩的效果,可以非常方便去进行娱乐、影音、上网。
Linux的应用相对单纯很多,没有什么绚丽多彩的效果,因此Linux的性能是非常出色的,可以完全针对机器的配置有针对性的优化,
简单来说Windows适合普通用户进行娱乐办公使用,Linux适合软件开发部署
Unix和Linux有什么区别?
Linux和Unix都是功能强大的操作系统,都是应用广泛的 ...
面试-Nginx
Nginx搬运自掘金用户:小杰要吃蛋 [侵删]
什么是Nginx?
Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。
为什么要用Nginx?
跨平台、配置简单、方向代理、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发,内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件好,耗费内存少,
而且Nginx内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
使用Nginx的话还能:
节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
稳定性高:宕机的概率非常小
接收用户请求是异步的
为什么Nginx性能这么高?
因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
Nginx怎么处理请求的?
nginx接收一个请求后,首先由listen和server_name指令匹配s ...
面试-消息队列
消息队列搬运自掘金用户:小杰要吃蛋 [侵删]
什么是消息队列
MQ就是消息队列。是软件和软件进行通信的中间件产品
MQ的优点
简答
异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。
应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。
流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。
日志处理 - 解决大量日志传输。
消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。
详答
解耦、异步、削峰是什么?。
解耦:A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃…A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。如果使用 MQ,A 系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费。如果新系统需要数据,直接从 MQ 里消费即可;如果某个系统不需要这条数据了,就取消对 MQ 消息的消费即可。 ...
面试-Python
一、基础试题1、对字典d = {'a': 24, 'b': 53, 'd': 56, 'h': 7} 按照字典中的value值排序。1234567# 按照字典中的键排序:sorted(d.items(), key=lambda x: x[1])# 按照字典中的键排序:sorted(d.items(), key=lambda x: x[0])# 在转化为字典 使用dict 函数
2、反转字符串 “aSter”123print('aSter'[::-1])# 取头不取尾
3、按照list1 中的元素的由从大到小排序12345list1 = [{'name': "b", 'age': 20}, {'name': "a", 'age': 10}, {'name': ...
面试-计算机网络
计算机网络搬运自掘金用户:小杰要吃蛋 [侵删]
什么是网络编程
网络编程中两个主要的问题
网络协议是什么
为什么要对网络协议分层
计算机网络体系结构
1 TCP / UDP
1.1 什么是TCP/IP和UDP
1.2 TCP与UDP区别:
1.3 TCP和UDP的应用场景:
1.4 形容一下TCP和UDP
1.5 运行在TCP 或UDP的应用层协议分析。
什么是ARP协议 (Address Resolution Protocol)?
什么是NAT (Network Address Translation, 网络地址转换)?
从输入址到获得页面的过程?
1.6 TCP的三次握手
1.7 TCP的四次挥手
2 Socket
1 什么是Socket
2 socket属于网络的那个层面
3 Socket通讯的过程
4 TCP协议Socket代码示例:
5 UDP协议Socket代码示例:
6 Socket的常用类
3. HTTP
什么是Http协议?
Socket和http的区别和应用场景
什么是http的请求体?
http的响应报文有哪些?
http和https的区别?
HTTPS ...
面试-Django
DjangoDjango基础整体结构如何理解设计模式中的MVC模式,你平时怎么使用这种模式?如何理解Django中的MTV模型?介绍一下Django中你熟悉的模块及其作用。如何看待Django自带的admin,并说说你的使用经验。如何理解WSGI的作用?如何自己实现WSGI协议?为什么正式部署不要开启DEBUG=True?
Model层如何理解Django migrations的作用?是否有过手动编辑migrations文件的经历?原因是什么?有哪些需要注意的?介绍一下ORM的概念?介绍一下ORM下的N+1问题、发生的原因以及解决方案。介绍一下Django中Model的作用。Model的Meta属性类有哪些可配置项?其作用是什么?日常怎么优化它?介绍一下Queryset的作用以及你常用的QuerySet优化措施?介绍一下Pagination的用法。介绍一下Model中Field的作用。如何定制Manager?什么场景下需要定制?原生SQL的效率跟ORM的效率是否进行过对比?结果如何?如何理解这种差异?Django内置的权限逻辑以及其粒度?
View层Django的funtion vie ...
面试-Redis
Redis搬运自掘金用户:小杰要吃蛋 [侵删]
什么是Redis?
Redis 是一个使用 C 语言写成的,开源的高性能key-value非关系缓存数据库。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。Redis的数据都基于缓存的,所以很快,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。Redis也可以实现数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作是原子性的。
Redis有哪些优缺点?
优点
读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。
支持数据持久化,支持AOF和RDB两种持久化方式。
支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
缺点
数据库容量受到物 ...