面试要点(更新中)

2017-12-12  本文已影响0人  带马界的神秘人

OSI7层模型

开放系统互联(Open System Interconnection),国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层.

TCP 滑动窗口、三次握手、四次挥手、粘包拆包

三次握手

完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:

netstat -ano

UDP

UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。

UDP
TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。
在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

DDos攻击

JVM垃圾回收与内存模型

垃圾回收(Garbage Collection,GC)算法

由于垃圾回收会导致java进程停顿响应一段时间,所以有两种优化方式

  1. 分代垃圾回收
    只是根据对象存活周期的不同将内存划分为几块;
    这样就可以根据各个年代的特点采用最适当的收集算法;
    一般把Java堆分为新生代和老年代;
    • 新生代
      每次垃圾收集都有大批对象死去,只有少量存活;
      所以可采用复制算法;
    • 老年代
      对象存活率高,没有额外的空间可以分配担保;
      使用"标记-清理"或"标记-整理"算法;

优化方式 减少每次回收对象数量 不同区域采用不同的回收算法
缺点 老年代对象增多后 每次回收的数量还是不能减少。不能控制每次回收的时间

  1. 增量GC
    将回收分段进行 不是一次性完成。
    优化方式 进一步减小每次回收的对象数量,控制了每次回收时间。

复制算法(Copying)
算法思路
1. 把内存划分为大小相等的两块,每次只使用其中一块;
2. 当一块内存用完了,就将还存活的对象复制到另一块上(而后使用这一块);
3. 再把已使用过的那块内存空间一次清理掉,而后重复步骤2;

新生代回收采用此类算法,所以新生代内存分为2块Eden和Survivor Space,Survivor Space又分为 To Survivor、 From Survivor

如果另一块Survivor空间没有足够空间存放上一次新生代收集下来的存活对象时,这些对象将直接通过分配担保机制(Handle Promotion)进入老年代;

所以当设置的年轻代和Eden与survivor不合理的时候 将导致大部分对象分配到了老年代,老年代对象过多的时候 将导致full gc ,full gc频繁将导致整个jvm吞吐量下降

标记清除整理(mark sweep compact)
将存活的对象像内存的一端移动

image.png
用于老年代回收,因为老年代对象存活率高,没有额外的空间可以分配担保;

mysql集群

了解binlog

利用binlog恢复

mysqlbinlog  --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456 

亦可导出为sql文件,再导入至数据库中:

mysqlbinlog  --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 >d:\1.sql 
source 1.sql

主从

主服务器将更新写入binlog,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。


主从流程
  1. 主库将更新写入binlog
  2. 从库读取主库binlog 写入自己的relay log
  3. 从库的sql线程读取relay log 进行更新

所以master是以推送的方式通知从服务器更新。
改变主mysql的配置,注意每个mysql的server-id必须不同

[mysqld] 
log_bin            =   mysql-bin
server_id          =   1

改变从mysql的配置

[mysqld]
log_bin           = mysql-bin
server_id         = 2
relay_log         = mysql-relay-bin
log_slave_updates = 1

改变配置后重启主从mysql

  1. 连接主库,执行命令 查看主库状态
SHOW MASTER STATUS;
  1. 连接从库,执行
CHANGE MASTER TO MASTER_HOST='主库ip',
MASTER_USER='主库用户名',
MASTER_PASSWORD='主库密码',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;

启动从库

START SLAVE;

查看从库状态

SHOW SLAVE STATUS\G

如果看到
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
表示主从创建成功

主主

将主从的流程反过来再做一次,就可以实现主主复制。
改变上面的主库配置

[mysqld]
log_bin           = mysql-bin
server_id         = 1
relay_log         = mysql-relay-bin
log_slave_updates = 1

重启两个库都执行后续操作即可实现主住复制

主主双从

主主复制成功后,可以每个主库在连接一个从库

数据库事务

事务的4个特性ACID

数据库事务隔离级别

大多数数据库默认的事务隔离级别是Read committed,比如Sql Server , Oracle。Mysql的默认隔离级别是Repeatable read。

mysql锁情况

例1: (明确指定主键,并且有此数据,row lock)
SELECT * FROM products WHERE id='3' FOR UPDATE;
例2: (明确指定主键,若查无此数据,无lock)
SELECT * FROM products WHERE id='-1' FOR UPDATE;
例2: (无主键,table lock)
SELECT * FROM products WHERE name='Mouse' FOR UPDATE;
例3: (主键不明确,table lock)
SELECT * FROM products WHERE id<>'3' FOR UPDATE;
例4: (主键不明确,table lock)
SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;

mysql性能优化

敏捷开发

持续可以 持续集成
四个价值观
沟通 简单 反馈 谦逊

项目管理

引用文章

上一篇 下一篇

猜你喜欢

热点阅读