面试问题记录 二 (数据库、Linux、Redis)
面试问题记录 二 (数据库、Linux、Redis)
前言
接着上次的面试问题记录,在最后还有几道问的数据结构方面的知识点要补充
还是那句话:如果文中解释有明显错误,劳烦请及时指正我,在这不胜感激!!!
一、MySQL
1.说说MySQL与MongoDB的区别?
答:首先就是MySQL是关系型数据库,由二维表及其自身之间的关系组成的数据组织,这样易于维护,而且适用于SQL复杂的查询、支持事务等;MongoDB的话是以数据结构化的方式存储,而且和MySQL不同,它是只能存储在随机存储器上的,底层数据结构是B树, 虽然本身没有事务机制,但是可以从逻辑上实现事务。
2.内连接、左连接、右连接是怎样的?
答:内连接(inner join)是把匹配的都显示出来,比如两张表,首先确定从哪张表查出要匹配的字段,然后加上关键字inner join,把后面符合条件的结果查出来;左连接(left join)是将左表为基准,来一一匹配右表,如果匹配不上返回左表内容,右表返回空;右连接(right join)是将右表为基准,来一一匹配左表,如果匹配不上则返回右表内容,左表返回null。
3.如何分库分表?为什么分?
答:当我们一开始数据库中没有进行分库分表的时候,由于数据库中的数据量并不是可控的,而且随着业务的发展,数据量就会不断扩大,这样会导致数据库的操作开销越来越大,而且服务器的资源是有限的,最终数据量和数据库的处理能力都会到达瓶颈;分库分表有垂直和水平方式,一般是先垂直后水平,垂直是按一个系统中不同的业务来分库分表,也可以解决那种表中字段较多,数据量大,不常用的,长度比较长的进行分表处理;水平是将数据量大的单张表的数据分到不同的数据库,相同结构的表中。当然使用这种策略还会遇到事务一致性、容量限制、分页排序、全局主键唯一等问题。分库分表的话,目前知道的是用单独的服务MyCat去实现或者用ApacheShardingJDBC实现,只不过ShardingJDBC是融合在项目中的。
4.说一下事务?
答:事务就是将一组SQL语句放在同一批次内执行,如果一组中有一个SQL语句执行不成功,则整个批次中的SQL语句都不会执行,而MySQL事务只支持InnoDB和嵌入型数据库BDB。事务具有的ACID原则,也就是原子性、一致性、隔离性、持久性;而原子性表示整个事务中所有操作,要么全成功,要么全都不执行;一致性表示不管在任何给定的时间并发事务有多少,都要保持系统处于一致的状态;隔离性表示如果有两个或多个事务同一时间发生,事务将进行串行化或序列化,来保证同一时间只有一个请求来操作数据;持久性表示事务一旦执行完毕后,事务所做的操作将持久的保存在数据库中,而且不会回滚。
5.如何分页?
答:用limit关键字,limit (pageNo-1)*pageSzie,pageSzie [pageNo:页码,pageSize:单页面显示条数]
6.三大范式知道吗?
答:第一范式是表示列的原子性,保证每一列都是最小单元,不能再分割了;第二范式是在第一范式的基础上建立的,每一列都要和主键相关,主要针对联合主键而言,就是每个表只描述一件事情;第三范式确保满足第二范式,每一列都和主键直接相关,而不是间接相关,也就是避免数据冗余。
具体可参考下面两篇文章:《数据库设计三大范式 》 《数据库范式那些事》
面试文章:数据库面试题
7.它的索引是怎么实现的?
答:快速定位表中内容的一种机制,帮助MySQL高效获取数据的数据结构。索引主要有四种,一主键索引Primary Key,二唯一索引Unique,三常规索引index,四全文索引FullText。而且mysql5.6以前的版本只有MyIsam支持全文索引,之后的话,两种数据引擎都支持全文索引,且字段数据类型为char,varchar、text及其系列的数据类型。
可参考文章:漫谈数据库索引
二、Linux
1.说一下你常用的命令
答:最基础的话,比如cd进入某个目录、pwd显示当前文件路径、ls查看文件列表、ll查看文件列表详情、mkdir创建目录、rm删除、mv移动、cp复制、find搜索、whereis显示二进制文件路径、which查找文件、cat查看文件内容、grep匹配文件中具体内容,tar压缩解压、zip压缩、unzip解压、init 6重启、init 0立刻关机、shutdown关机、ifconfig、ip addr查看网络接口属性、ps -ef查看所有进程、top显示进程状态、netstat监听连接端口、kill进程、service、systemctl服务查看、启动、终止(service命令服务名在中间,systemctl命令服务名在最后),data显示系统日期时间。
三、Redis
1.Redis是什么?为什么用它?
答:redis是基于内存可持久化的日志型、key-value型数据库;首先就是它可以做高速缓存,而且有多种数据类型,支持事务,其次可以简单实现消息队列和session共享;redis的话也是针对一些数据量不是很大,访问频繁的数据。这样访问数据的话,就会变得快而且安全。
可参考文章:《Redis面试题》 《为什么要用Redis》
2.Redis支持的数据类型有哪些?
答:应该有8种,最基本的是五种;字符串string、哈希hash、集合set、列表list、有序集合zset;
3.缓存雪崩、缓存穿透、缓存击穿可以解释一下吗?
答:首先缓存是这样
缓存雪崩:缓存中大量key同时失效,导致大量请求打在数据库上,导致数据库承受不住,宕机;还有就是缓存服务器崩了。可以使用热点数据永不失效、排队、限流、降级、主从+哨兵模式,这方面并未有做过深的探究。
缓存击穿:和雪崩相反,当某些超热点的数据在缓存过期瞬间打在数据库上,使数据库压力过重,崩溃。可以将热点数据设置永不过期,或者在拿数据的时候加互斥锁。
缓存穿透:如果缓存和数据库都没有的数据记录,被频繁的请求和调用,导致数据库中没有数据,缓存也没法更新数据;这样的方式也被用于恶意攻击,不走寻常路。可以在后端做数据校验,增添过滤器。
4.如何保证缓存和数据库数据一致?
答:一般是设置缓存过期时间,等超时之后直接从数据库重新读取回填缓存,也就是要删除缓存,更新数据库的操作。
二是先删除缓存,再更新数据库。方法就是延时双删,比如有两个线程A和B,首先A删除缓存,去更新数据库,然后B来读缓存,发现缓存已经被删除,然后去读数据库,此时A还未更新完成,所以B拿到的数据是旧的,然后将旧值写入缓存,因为给A设置了一个估算时间sleep,这个时间是大于B的整个过程的,所以这个时间已过,缓存将又被删除,这样当有别的线程来访问,则从数据库中得到最新的数据。
四、上篇补充内容
1.快速排序是怎样的?
答:参考:《十大经典排序算法(动图演示)》,《玩转Java快速排序》
2.说一下HashMap?
答:存储结构 默认容量 装载因子 hashcode/equals 1.7和1.8版本变化
1.内部存储结构:数组+链表+红黑树(JDK8)
2.默认容量16,默认装载因子0.75。
3.key和value对数据类型的要求都是泛型。
4.key可以为null,放在table[0]中。
5.hashcode:计算键的hashcode作为存储键信息的数组下标用于查找键对象的存储位置。equals:HashMap使用equals()判断当前的键是否与表中存在的键相同
3.为什么用迭代器?
答:为了提供给不同集合类的统一遍历的接口,迭代器也是一种设计模式吧。
4.线程池流程
最后
就简单的记录了一下,到后期会把一些面试的资料也会总结一下,毕竟这次也是一小部分的问题;具体关于JavaEE上的还未修改出来,也会在最近加紧总结。其实现在面试也更多去偏向业务上的东西,加上自己的理解,像“八股文”这种东西还是需要看的,毕竟有些问题实在是很基础,不问也不行。
最近也是发现一句话“无关紧要的事情,直接舍弃。集中火力,不要分散自己的学习精力。你不能什么都学”
平常真的是把注意力放在了广度上,而从未去深度的get那个点。
面试问题记录 二 (数据库、Linux、Redis)的更多相关文章
- 【2017-06-20】Linux应用开发工程师C/C++面试问题记录之一:Linux多线程程序的同步问题
参考之一:Linux 线程同步的三种方法 链接地址:http://www.cnblogs.com/eleclsc/p/5838790.html 简要回答: Linux下线程同步最常用的三种方法就是互斥 ...
- Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)
第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Mem ...
- 也用 Log4Net 之将日志记录到数据库的后台实现 (二)
也用 Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...
- Log4Net 之将日志记录到数据库的后台实现 (二)
原文:Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之前 ...
- [Java面试十二]数据库概念相关
1. 什么是存储过程?它有什么优点? 答:存储过程是一组予编译的SQL语句,它的优点有: 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次. 允许更快执 ...
- 面试准备——(二)专业知识(1)Linux
面试的问题: 腾讯: 1. 查看进程的命令 美团: 1. 常用的命令——美团/滴滴 2. 如何在性能测试的时候查看进程 3. kill -9/-15区别 滴滴: 1.如何找到一个特定文件 2. 如何替 ...
- Redis学习记录(二)
1.Key命令 设置key的过期时间. expire key second:设置key的过期时间 ttl key:查看key的有效期(如果显示正数说明该key正在倒计时,如果是-1说明该key永久保存 ...
- .net core的配置介绍(二):自定义配置(Zookeeper,数据库,Redis)
上一篇介绍了.net core的配置原理已经系统提供的一些常用的配置,但有时我们的配置是存放在Zookeeper,DB,Redis中的,这就需要我们自己去实现集成了. 这里再介绍几个我们用的多的配置集 ...
- Redis学习之路(二)之Redis入门基础
一.Redis基本介绍 (1)Redis介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(string ...
随机推荐
- 干货!MySQL 的 InnoDB 存储引擎是怎么设计的?
MySQL 里还有什么其他成员呢? 对于 MySQL,要记住.或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图,另一张则是 InnoDB 架构图: 遇到问题,或者学习到新知识点时,就 ...
- 解决java socket在传输汉字时出现截断导致乱码的问题
解决java socket在传输汉字时出现截断导致乱码的问题 当使用socket进行TCP数据传输时,传输的字符串会编码成字节数组,当采用utf8编码时,数字与字母长度为1个字节,而汉字一般为3个字节 ...
- electron-ipc通信性能分析
electron-ipc通信性能分析 electron的主进程和渲染进程间通信方案 ipc通信 借助外部存储通信(通过ipc通知其它进程去读取) 方案描述 ipc通信 使用 主进程 ==> 渲染 ...
- docker4-docker网络,容器编排,集群部署
1,docker网络 1.1,docker0 有三个网络环境,那么docker是如何处理容器网络访问的? 1.2,测试 docker run -d -p 80:8080 --name tomcat01 ...
- EXCEL根据某一列单元格特定标点符号分行,其它列内容一致
注意事项:此方法注意运用excel空值单元格填充,因此数据处理之前,如果存在值为空的,请特殊处理,后期处理完再替换为原来的空值 1.在决定分行数的列后插入一列 2.根据逗号之前值最多的数量来决定分行数 ...
- .net core AES加密解密及RSA 签名验签
引用 using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; using System; using Sy ...
- vue 快速入门 系列 —— vue loader 下
其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...
- 4、nfs服务器的搭建
4.1.nfs服务介绍: samba服务器一般互联网企业不会使用 nfs服务的端口是不固定的,需要先启动rpc服务对nfs服务端口进行注册 4.2.安装nfs: rpm -qa nfs-utils r ...
- 使用 CKEditor编辑插件
1, 安装方法 下载CKEditor插件,然后解压到对应的文件中.建议解压到JS文件夹下面的CKEditor这个文件夹下.下载地址 : http://down.chinaz.com/soft/2516 ...
- Python自动化之封装日志模块(一)
------------恢复内容开始------------ 简介: 自己也在训练营学习之中,闲来之余,自己写着玩的,主要还是为了学习,希望和前辈和大佬相互学习共进. 日志模块主要有四大组件:日志器, ...