面试之前的准备

数据库

数据库表命名规范:
表名一般的格式模块名称_详细信息,禁止使用数据库关键字命名
日志表一般以Sys开头,数据字典表一般以SD_开头,系统字典表一般以DT_开头。
常见的表名单词

user 用户
category 分类
goods 商品、物品
good_gallery 物品相册
good_cate 物品分类
attr 属性
article 文章
cart 购物差
feedback 用户反馈
order 订单
site_nav 页头和页尾导航
site_config 系统配置表
admin 后台用户
role 后台用户角色
access 后台操作权限
role_admin 后台用户对应的角色
access_role 后台角色对应的权限

非关系型数据库

redis
为什么使用缓存,使用缓存的好处是什么,缓存如何就不用打到关系型数据库了。
缓解关系型数据库的并发压力:如很多的热点数据,或者经常访问的关键字
减少响应时间,内存IO速度比磁盘速度快。
提高系统的抗压能力,单机的Redis就支持很大的并发量。
Redis常见的数据类型有哪些:
string(字符串):用来实现简单的kv键值对存储(计数器)
List(链表):实现双向链表,比如用户的关注,粉丝列表
Hash(哈希表):用来存储彼此相关信息的键值对
Set(集合):存储不重复元素,比如用户的关注者
Sorted Set(有序集合):实时信息榜。
Redis事务和Mysql事务有什么不一样:(要查,我Mysql都不知如何实现事务)
1.将多个请求打包,一次性、按序执行多个命令的机制
2.Redis通过MULTI,EXEC,WATCH等命令实现事务功能
Redis如何实现分布式锁(要查具体案例)
1.使用setnx实现加锁,可以同时通过expire添加超时
2.锁的value值可以使用一个随机的 uuid或者特定的命名
3.释放锁的时候,通过uuid判断是否是该锁,是则执行delete释放锁
Redis常见的缓存模式Redis为啥会有常用的缓存模式
Cache ASide:同时更新缓存和数据库
2.Read/Write Through:先更新缓存,缓存负责同步更新数据库
3.Write Behind Caching:先更新缓存,缓存定期异步更新数据库
如何处理数据库和缓存之间的数据一致性问题?为甚恶魔会出现这个问题
可能导致问题:先更新数据库后更新缓存,并发写操作可能导致缓存读取的是脏数据。
解决方法:一般先更新数据库然后删除缓存
三大Redis常考点:
缓存穿透,缓存击穿,缓存雪崩。
1.大量的请求在缓存中查不到到,落到后端数据库查找没返回值,(如何解决)
2.热点数据key过期,大量请求就达到了数据库。(分布式锁(为啥能解决),异步后台更新(后台写个脚本根据过期的key自动刷新))
3.缓存雪崩:部分缓存服务器挂了,提高系统的监控和报警机制。
MongoDB
文档型非关系型数据库,以键值来存储数据
集合就是MongoDB中的文档组,类似于MySQL中的数据表。
文档是key value组成。类似于关系型数据库的每一条记录

非关系型数据库的增删改查

关系型数据库

MySQL

什么是事务及事务的特性:事务是一个操作序列,这些操作要么都做,要么都不做,是一个不可分隔的单位;原子性(要么改变,要么不变),一致性(转账:a减少,b就增加),隔离性(多个用户之间的操作互不影响),持久性(改变之后的影响是持久的)。
4大事务隔离级别,未提交读(脏读):,提交读(导致不可重复读),可重复读(导致幻读),可序列化串行化
死锁:多个进程因争夺资源而造成的一种僵局,多个进程都无法获取资源
如何避免死锁 (1) 允许某些资源同时被多个进程访问。 2)预分配 3)允许进程强行抢占被其它进程占有的资源 4)死锁检查(资源管理器堆栈跟踪,查看线程哪出现了死锁)
为什么产生死锁:
如何预防死锁:破坏产生死锁的条件,如:允许进程剥夺其他进程进程占用的资源。
产生死锁的条件:互斥条件(一个资源只能被一个进程使用)。请求与保持条件(当进程因请求资源而阻塞时,对已获得的资源不会释放)。不可剥夺条件(以获得的资源,在未使用完,不可强行剥夺)。循环等待(若干进程形成循环等待的条件)

关系型数据库的增删改查

索引相关

MySQL的索引原理

网络协议

常见的两种网络模型

OSI7层模型:
应用层(http,DNS协议),表示层,会话层,传输层(TCP协议),网络层(IP协议,路由器),数据链路层,物理层。
TCP/IP模型
应用层(http,dns,ftp),传输层(TCP/UDP),网络层(IP),网络接口层
两者的差异:
网络层举例:OSI7层模型时无连接+面向连接,而tcp/ip是无连接。无连接:直接传输数据。面向连接:建立,传输,释放。

Python知识点

python命名规则,不能以数字开头,一般时英文开头,命名最好由英文、下划线、数字组成。
python字典的key不支持为list或dict类型,因为list和dict类型是unhashable(不可哈希)的。

框架知识点

Django与Flask在数据库模型的区别

Flask和Django的网络请求比较

Flask与Django的表单类(待续)

算法知识点

常见的排序算法

常见的查找算法

数据结构知识点

数组

链表

二叉树

队列

posted @ 2022-05-01 16:59  索匣  阅读(23)  评论(0编辑  收藏  举报