面试问题记录 二 (数据库、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 ...
随机推荐
- 实验5、Flask设计模式和Web服务体验
1. 实验内容 Flask appbuilder包括基本的表单验证,内置管理模块.本节主要学习Flask appbuilder的后台管理模块使用和对Flask设计模式拓展作简要介绍 2. 实验要点 掌 ...
- 【NX二次开发】打开信息窗口UF_UI_open_listing_window
头文件:uf_ui_ugopen.h函数名:UF_UI_open_listing_window 函数说明:打开信息窗口 测试代码: #include <uf.h> #include < ...
- 使用 Docker 部署 Node 应用 - 镜像文件尺寸的优化
前面 使用 Docker 部署 Node 应用 一文中完成了镜像的创建和运行,不过生成的镜像还有些粗糙,需要进一步优化. 镜像的优化 通过 docker images 看到简单的一个 node 服务端 ...
- MQTT 协议是个啥?这篇文章告诉你!
文章首发于我的公众号「程序员cxuan」,欢迎大家关注呀- 说到做到! 之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦. 那么读者的要求必须要满足啊,所以 ...
- 【模拟8.11】将军令(贪心&&树形DP)
只看45分的话,是树形DP....(当然也有能拿到70分+的大佬) 40分: 只考虑k==1的情况,树形DP 所以每个节点可能被父亲,自己,儿子控制 设f[MAXN][3],0表示儿子,1表示自己,2 ...
- Java实现工厂模式
工厂模式(Factory),当需要根据运行时的一些条件来决定创建具体对象时,就应该考虑使用工厂设计模式,将创建对象的任务交给工厂集中处理. 工厂模式有多种写法,总体分为简单工厂模式和抽象工厂模式 工厂 ...
- hive学习笔记之五:分桶
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 通过jquery创建节点以及节点属性处理
<!DOCTYPE html><html> <head> <meta http-equiv="Content-type" conte ...
- Spring学习日记03_IOC_属性注入_集合类型属性
Ioc操作Bean管理(xml注入集合属性) 注入数组类型属性 注入List集合类型属性 注入Map集合类型属性 Stu类 public class Stu { //1. 数组类型属性 private ...
- python3 依赖倒置原则示例
场景 针对园区停车信息,需要对各个公司提供的停车数据进行整合并录入自家公司的大数据平台 数据的录入无外乎就是对数据的增删改查 下面上一个常规的写法(未符合依赖倒置),整合来自 长安和丰田 的停车数据 ...