扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1、可能会问nosql和关系型数据库的区别:
成都创新互联公司专注于尖扎企业网站建设,成都响应式网站建设,商城网站制作。尖扎网站建设公司,为尖扎等地区提供建站服务。全流程按需网站设计,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
优点:
1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用Oracle那样花费大量成本购买使用,相比关系型数据库价格便宜
2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库
3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型
4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难
缺点:
1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本
3)不提供关系型数据库对事物的处理
2、介绍下redis和mongodb:
自行google。
3、应用场景:
redis:
a.主要是做热点数据缓存。
b.数据过期处理。
c.消息队列等功能。
d.计数,例如投票等。
mongodb:
mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。mongo适用于以下场景:
a.网站数据:mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
b.缓存:由于性能很高,mongo也适合作为信息基础设施的缓存层。在系统重启之后,由mongo搭建的持久化缓存可以避免下层的数据源过载。
c.大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。
d.高伸缩性的场景:mongo非常适合由数十或者数百台服务器组成的数据库。
e.用于对象及JSON数据的存储:mongo的BSON数据格式非常适合文档格式化的存储及查询。
4、支持的数据类型:
内容比较多,自行将网上的信息整理一下。
一.语言
1.推荐一本看过最好的python书籍?
2.谈谈python的装饰器,迭代器,yield?
3.标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗?
4.python适合的场景有哪些?当遇到计算密集型任务怎么办?
5.python高并发解决方案?我希望听到twisted-tornado-gevent,能扯到golang,erlang更好
二.操作系统
可以直接认为是linux,毕竟搞后端的多数是和linux打交道。
1.tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗?
2.time_wait是什么情况?出现过多的close_wait可能是什么原因?
3.epoll,select的区别?边缘触发,水平触发区别?
三.存储
存储可能包含rdbms,nosql以及缓存等,我以mysql,redis举例
mysql相关
1.谈谈mysql字符集和排序规则?
2.varchar与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符
3.primary key和unique的区别?
4.外键有什么用,是否该用外键?外键一定需要索引吗?
5.myisam与innodb的区别?innodb的两阶段锁定协议是什么情况?
6.索引有什么用,大致原理是什么?设计索引有什么注意点?
redis相关
1.什么场景用redis,为什么mysql不适合?
2.谈谈redis的事务?用事务模拟原子+1操作?原子操作还有其它解决方案吗?
3.redis内存满了会怎么样?
四.安全
web安全相关
1.sql注入是怎么产生的,如何防止?
2.xss如何预防?htmlescape后能否避免xss?
3.csrf是什么?django是如何防范的?
密码技术
1.什么是分组加密?加密模式有哪些?ecb和cbc模式有什么区别?为什么需要iv向量?
2.简单说说https的过程?
3.对称加密与非对称加密区别?
3.如何生成共享秘钥? 如何防范中间人攻击?
五.杂
是否关注新技术啊?golang,rust是否了解?numpy,pandas是啥鸟?
是否紧跟时代潮流?逛不逛微博,刷不刷知乎?
可能你觉得我问的好细,但这好多都是平常经常遇到,并需要解决的,细节更能体现一个人。
如果你觉得小kiss,欢迎投简历给我yihaibo@longtugame.com,龙图游戏运营支持中心数据分析部招人;觉得有点问题,那还等什么,赶快来和我交流交流。
更新:讨论区挺热闹,有人说好简单,有人说好难,其实我觉得这只适合面试2~3年工作经验的后端工程师。真的没有问
很难的题目,只是可能你平时没有注意。
在这里我推荐几本书吧
python参考手册,绝对让你更上一层楼
图解密码技术,密码入门不二之选
mysql技术内幕第五版,有点厚当手册读读,要有耐心,高性能mysql也强烈建议读读
effective tcp/ip programming
为什么评论区有这么大差异?我想是个人经历不一样吧,如果是搞web的对操作系统这块和密码技术会偏弱,但如果是系统工程师或是游戏服务端这块会明显偏强。
六.后记
最近我也面试了不少童鞋,我发现能达到要求的真的少之又少,很多hr都说Python是最难招聘的岗位,我想是有道理的,这真的很值得我们去深思?
我想有一部分原因是Python这门语言造成的,会写Python的人很多,但写的好的人很少,大部分都把Python当做脚本来写,缺乏面向对 象,模式的思想。想想Java,大家都习惯了接口,实现分离,设计模式在Java中也喊了很多年,尤其是ssh三大框架一出,用着用着就理所当然的认为就 该这么做,虽然也有点坏处,但对企业级Java开发无疑是一大进步。
反观Python,尤其是生成器,协程,元类给Python注入了很大的灵活性,想写的Pythonic有不小难度,但其实Python高级特性就那么几个,干掉了也就没有了。
当你觉得Python遇到了瓶颈,不妨停下来好好想想。研究研究设计模式,想想重构,了解领域驱动设计,敏捷开发,再回来读读以前写的代码,当眼界变高了,代码也就美了。
当然思想的提高不是一朝一夕,模式,原则会经常让你纠结,纠结就会思索,思考就走出了自己的路,当然条条大路通罗马。
数据库等存储技术是研发工程师迈不过的坎,对关系数据库以mysql举例来说,你必须清楚的知道什么字段选择什么类型,类型字节大小,限制条件,这 东西也很容易理解,多想想即可,比如set类型,要支持交并等操作,1个字节只能存8个类别。数据类型搞定了,下面就是索引了,mysql索引种类?主 键,唯一索引,普通索引。索引类别,BTree索引,hash索引。索引的优缺点,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情况,比如mysql子查询慢等。其实到这里研发工程师就差不多,当然你可以继续深入下去,比如读写分离,集群管理,甚至一些 参数调优。
如果是准备学前端,建议你可以看下这篇文章!
2022 年最新 Web 前端学习路线图,我梳理了完整的细节知识点,企业项目开发解决方案所需技术栈,更适合自学 Web 前端开发的同学,路线清晰明确,少走弯路。
零基础学编程,从宏观到微观全面了解
专业、语言选择、行业介绍、技术发展变革 (opens new window)????
零基础学编程选择什么专业好,为什么选择前端开发,职业前景,未来选择性,是否适合初学者,行业竞争,什么样的前端工程师、市场需求更抢手,前端开发行业介绍,前端开发的变革,大前端时代
HTML / HTML5
搭建网页结构的语言,增加了很多移动端支持,简单好学
详细 HTML/HTML5 知识梳理
Web 前端入门到精通核心标签和属性 (opens new window)
文档声明、文档结构、功能标签,块级元素,区块标签,内联元素,特殊内联元素,转义字符,表格标签,标签中的属性,input 元素中的属性
HTML/HTML5 标签和属性,系统学习教程(图文版)
认识互联网(基本原理) (opens new window)
HTML/HTML5 标签基础语法 (opens new window)
HTML/HTML5 常用标签和属性 (opens new window)
Git 快速入门到实践系统学习教程 (opens new window);Git 是什么,Git 的安装配置,Git 配置,创建版本库,初始化项目,Git 本地提交、推送项目至远程仓库,克隆远程仓库(项目)
Markdown 语法 和 日常学习、工作笔记、企业项目文档的最佳实践
HTML/HTML5 标签和属性,系统学习教程(视频版)
群直播回放视频可查阅,或 在线观看
HTML/HTML5 系统学习视频合集 (opens new window)
HTML/HTML5 高频面试真题和答案解析
中小企业和一线大厂最近 3 个月 HTML/HTML5 最新面试真题和答案解析 (opens new window)
CSS / CSS3
样式表,美化网页的语言,增加了很多动画、过渡等新特性,所见即所得,非常有意思。
详细 CSS/CSS3 知识梳理
Web 前端 CSS、CSS3 核心样式和属性 (opens new window);盒模型,常用文本样式属性,字体属性,段落和行相关属性,CSS 的书写位置,层叠性和选择权重,伪元素,伪类,css3 新增伪类,标签选择器、id、class 选择器,复合选择器,元素关系选择器,序号选择器,属性选择器,浮动,定位,鼠标样式,边框,圆角,盒子阴影,背景,浏览器前缀,2D/3D 转换
CSS/CSS3 样式,系统学习教程(图文版)
CSS 基础认知 和 选择器 (opens new window)
CSS 文本和字体属性、列表属性 (opens new window)
CSS 盒子模型 (opens new window)
CSS display 属性、背景属性、其他常用属性 (opens new window)
CSS 三大特性:继承、层叠性、优先级 (opens new window)
浮动、BFC 规范、清除浮动的最佳实践 (opens new window)
CSS 定位、层叠顺序、层叠上下文 (opens new window)
margin 负值的最佳实践 (opens new window)
圆角、阴影、文本图像处理、CSS 函数 (opens new window)
transition 过渡动画与 animation 自定义动画 (opens new window)
transform 2D 与 3D 转换 (opens new window)
SEO 搜索引擎优化代码规范
网页头部代码规范 (opens new window)
SEO 搜索引擎网页代码优化 (opens new window)
HTML/CSS 标签和样式代码规范 (opens new window)
CSS 样式命名规则和规范 (opens new window)
项目实战
30 个 CSS/CSS3 真实项目案例布局训炼(视频版) (opens new window
防御式编程 - 防御式 CSS (opens new window)
大厂 Web 前端项目开发规范和最佳实践 (opens new window)
CSS 还原 UI 设计,前端项目开发的必备工具 (opens new window)
扩展学习,项目功能点主流布局最佳实践
100+ CSS 主流布局企业项目功能案例,最佳实践 (opens new window)
CSS/CSS3 样式、PC 端项目开发,系统学习教程(视频版)
群直播回放视频可查阅,或 在线观看
CSS/CSS3 高频面试真题和答案解析,中小企业和一线大厂最近 3 个月 CSS/CSS3 最新面试真题和答案解析 (opens new window)
移动 WebApp 开发、多终端响应式开发
从 PC 端演化成移动 WebApp 熟练掌握跨端+各终端适配和性能优化,是一名优秀的前端开发必备的技能之一。
移动 WebApp 开发核心重难点知识梳理
Flex 弹性布局 (opens new window)Grid 网格布局 (opens new window)
响应式布局 (opens new window)
百分比布局 (opens new window)
rem 布局 (opens new window)
vw 布局 (opens new window)
移动端事件 (opens new window)
移动 Web 开发常见问题 (opens new window)
移动 Web 开发性能优化 等
Flex 弹性布局从入门到实践 (opens new window)
Grid 网格布局从入门到实践 (opens new window)
移动端项目实战
移动端开发核心基础必备知识 (opens new window)
移动 WebApp 项目开发常用技术及标准、规范和最佳实践 (opens new window)
响应式项目开发
多终端响应式项目开发最佳实践 (opens new window)
移动 WebApp 开发、多端响应式项目开发,系统学习教程(视频版)
群直播回放视频可查阅,或 在线观看
移动 WebApp 开发、多端响应式项目开发视频合集 (opens new window)
移动 WebApp 开发,高频面试真题和答案解析
中小企业和一线大厂最近 3 个月 移动 WebApp 开发,最新面试真题和答案解析 (opens new window)
云计算、云服务器的应用与实践
深入浅出云计算、云服务当前最新、最流行的技术生态与最佳实践是我们作为一名工程师时刻具备职业竞争力的前提。
云计算、低代码、元宇宙、云服务器、云原生、互联网技术架构演进 (opens new window)????
阿里云服务器实践 与 Nginx 部署 (opens new window)????
Nginx 部署的核心配置、性能优化、域名服务器备案 (opens new window)????
华为云服务器实践与 Nginx 部署,完整版 (opens new window)????
Git 在线部署入门到实践 (opens new window)????云服务器的实践:注册、配置,公共镜像、操作系统,网络和安全组,远程链接云服务器,常用 Linux 系统命令行,Nginx Web 服务器安装和启动、常用 Nginx 命令,深入域名结构,域名解析,Nginx 企业项目部署,Nginx 配置 HTTPS 加密协议、SSL 证书申请与配置,Nginx 性能优化、Gzip 压缩,多网站、多系统部署,企业级项目的最佳实践 ...
云计算在项目中的相关应用与实践(视频版)
群直播回放视频可查阅,或 在线观看
云计算、云服务器的实践与项目部署系统学习视频合集 (opens new window)????
企业项目相关,高频面试真题和答案解析
中小企业和一线大厂最近 3 个月 项目开发相关最新面试真题和答案解析 (opens new window)????
#JavaScript
前端开发工程师最重要的 "看家语言",JS 功底的好坏,决定了职业高度,学习需要下苦工
详细 JavaScript 基础+高级核心知识梳理
JavaScript 核心基础和常用方法 (opens new window)????
JavaScript 函数、BOM、DOM (opens new window)????
JS 常用内置对象和正则表达式 (opens new window)????
JavaScript 常见的 10 种设计模式、设计原则 (opens new window)????
工厂模式、构造器模式、单例模式、原型模式、发布订阅者模式(观察者模式)、适配器模式
装饰器模式、代理模式、外观模式、迭代器模式
JavaScript 在项目开发中的最佳实践
实用的 JS 开发技巧 (opens new window)????
JS 语法糖、新特性及优化技巧 (opens new window)????
JavaScript 深入系统学习教程(图文版)
待更新 ...
扩展学习,项目功能点 JavaScript 动效最佳实践
200+ JavaScript 动效经典企业项目功能案例,最佳实践 (opens new window)????(持续更新中 ...)
JavaScript 深入系统学习教程(视频版)
待更新 ...
JavaScript 高频面试真题和答案解析
中小企业和一线大厂最近 3 个月 JavaScript 最新面试真题和答案解析 (opens new window)????
#模块化、组件化开发
从传统单一模块开发到企业标准组件化开发掌握企业核心开发思想,动态交互开发。
详细 ES6 基础+高级核心知识梳理
ES6 基础入门和新增方法 (opens new window)????
新增变量、模板字符串、箭头函数、解构赋值、剩余参数、展开运算符、数据结构、Set 和 Map 共有的方法和属性、Set 和 Map 实例的方法、遍历器,数组、字符串、对象的新增方法等
ES6 高级核心重难点知识梳理 (opens new window)????
Promise 异步编程解决方案,class 类,module 模块化,module 的导入导出、注意事项,NodeJS 指令相关,Babel 编译器相关,webpack 相关
HTTP 协议、Ajax、XHR、本地存储、跨域、async/await (opens new window)????
HTTP 相关概念,HTTP 常用方法,HTTP 状态码,本地存储(cookie 的属性,编码与解码,sessionStorage/localStorage 的常用方法和属性),Ajax 相关概念,本地服务器,Ajax 基本的使用,XHR 的属性,XHR 的方法,XHR 的事件,JSON 的常用方法,跨域解决方案,Ajax 扩展内容,async/await
组件化开发
模板引擎,PC 端项目组件化项目重构开发,深入理解和实践组件化开发的核心开发思想
ES6 基础 + 高级,系统学习教程(图文版)
待更新 ...
ES6 实际开发中的实用技巧
npm 常用命令和使用技巧 (opens new window)????
选择 npm 时,应考虑的 5 个事项 (opens new window)????
正则表达式功能函数
15 个(ES6)正则表达式,真实项目应用场景必备 (opens new window)????
实用工具函数
58 个 ES6 实用工具函数,快速提升项目开发效率 (opens new window)????
模块化、组件化开发,深入系统学习教程(视频版)
待更新 ...
模块化、组件化开发、ES6 相关高频面试真题和答案解析
中小企业和一线大厂最近 3 个月模块化、组件化开发、ES6 最新面试真题和答案解析 (opens new window)????
#小程序开发
作为优秀的前端工程师必备技能,小程序是当下最爆火的轻应用开发技术,需要能够独立开发企业级小程序,拥有解决主流小程序功能需求的能力
详细 小程序开发知识梳理
小程序入门到实战核心重点知识梳理 (opens new window)????
基础概念,小程序中的文件类型,全局文件,全局配置,页面配置,window 属性、tabbar 属性、list 相关的配置,小程序 App 和页面 Page,小程序的生命周期函数,页面级的生命周期函数,页面级的数据,逻辑层中常用的 API,WXML 中的常用语法,常用的组件,input 组件、swiper 组件的属性,常用事件等
小程序开发,系统学习教程(图文版)
待更新 ...
小程序项目实战开发
待更新 ...
小程序开发,系统学习教程(视频版)
待更新 ...
#Vue 全家桶
从 2016 年前后开始流行的前端框架,采用模块化开发、数据驱动、声明式编程等等,核心在于前边的基础要扎实,后期学习就容易了
Vue 是一套用于构建用户界面的渐进式框架
与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。
另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
Vue 全家桶必备知识梳理
Vue 核心基础知识梳理 (opens new window)????
Vue 高级知识梳理 (opens new window)????
Sass 常见面试题与核心基础知识梳理 (opens new window)????
Vue 脚手架相关知识梳理 (opens new window)????
Vue3.x+TypeScript+Vite 即是当下的主流 (opens new window)????
Vue 全家桶,系统学习教程(图文版)
待更新 ...
Vue 全家桶项目实战开发
待更新 ...
Vue 全家桶深入系统学习教程(视频版)
待更新 ...
Vue 全家桶高频面试真题和答案解析
中小企业和一线大厂最近 3 个月 Vue 全家桶最新面试真题和答案解析 (opens new window)????
据不完全统计目前国内哪些大厂在使用 Vue
小红书,微博,哔哩哔哩(B 站),爱奇艺,芒果 TV,手机搜狐
饿了么,小米商城,一加手机,乐视商城,滴滴开源、高德开放平台、京东拼购+领券+新人频道 H5+京东云,网易云信+手机网易+网易邮箱 H5,大麦网 H5、唯品会 H5、少数派、百度指数、微信公众平台、大鱼号,携程 H5 多个模块,创客贴、兑吧、国美电器 H5、聚美优品触屏版,理想汽车,途虎养车,雪球财经、电玩巴士等等
开源中国,CSDN,Gitee(码云),GitLab,掘金,简书,蓝湖,IT 桔子等等
#TypeScript
TypeScript 简称 TS
TS 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TS 一起工作无需任何修改,TS 通过类型注解提供编译时的静态类型检查。
由微软开发的自由和开源的编程语言。
TS 设计目标:是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。
详细 TypeScript 知识梳理
TypeScript 核心基础知识梳理 (opens new window)????
TypeScript 开发环境、工作流,定义变量/常量,基本类型,高级类型,类型适配(类型断言),函数类型,对象类型,接口,类,访问修饰符,模块,泛型
TypeScript 高级核心知识梳理 (opens new window)????
类型守卫,函数重载,调用签名 call signiture,索引签名,只读 readonly,双重断言 Double Assertion,常量断言,this,类型检测 typeof,类型查找,类型映射 Mapped Types,映射修饰符
TypeScript 系统学习教程(图文版)
待更新 ...
TypeScript 深入系统学习教程(视频版)
待更新 ...
TypeScript 高频面试真题和答案解析
中小企业和一线大厂最近 3 个月 TypeScript 最新面试真题和答案解析 (opens new window)????
#React 生态
React 是一个用于构建用户界面的 JavaScript 库,起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。 2022 年 4 月 26 日已发布最新版 18.1.0
详细 React 入门到项目实战知识梳理
React 核心基础知识梳理 (opens new window)????
基础环境准备,搭建 react 项目(JS 版本的),项目内容介绍,搭建 react 项目(TS 版本的)
tsconfig.json(TS 语法的配置文件),TS 编译器的工作流程,项目升级改造,创建基础演示项目,react 知识点,文件类型介绍,JSX、TSX
React 项目实战核心重点知识梳理 (opens new window)????
css 样式架构、全局样式,css 模组化,项目实操,基础理论,异步请求相关,组件生命周期,项目开发注意事项,钩子,常用钩子函数,useState 钩子函数细说,副作用,关于 useEffect(),项目中常用组件和方法,关于 HOC 和 Hook
React 生态,系统学习教程(图文版)
待更新 ...
React 生态桶项目实战开发
待更新 ...
React 深入系统学习教程(视频版)
待更新 ...
React 高频面试真题和答案解析
中小企业和一线大厂最近 3 个月 React 最新面试真题和答案解析 (opens new window)????
据不完全统计目前国内哪些大厂在使用 React
蚂蚁、飞猪、阿里大于、虾米音乐、口碑开放平台
猫途鹰、喜马拉雅 FM、斗鱼、知乎、豆瓣、美团、房多多、石墨文档、墨刀、TalkingData、xiaopiu、Teambition、Uber、倍洽、同盾科技、心知天气、拼多多、滴滴出行、Sentry、途牛、优酷、京东服饰+生鲜+旅行、算力矩阵、链家 H5、阿里云管理后台、Coding、CodePen、树莓派
36 氪、Notion、GoDaddy、站酷、Plotly、麦客 CRM、特赞营销日历、鹿班、网易云阅读 PC 端+网易云音乐 H5、猎聘网、看云文档编辑页、去哪儿 H5 多个模块、艺龙 H5 个别模块、租租车 H5、汽车之家车商城、Pocket、友盟、iH5 等
#团队协同、工程化,监控运维
TIP
Git 版本管理,缺陷管理,单人、团队开发与跨团队开发
RESTful API 接口管理,webpack / Gulp 自动化构建
CICD 自动化部署
Linux 项目部署
Nginx 反向代理、负载均衡
运行日志与监控
#大厂高薪面试真题
Interview questions
HTML/HTML5、CSS/CSS3 面试真题 (opens new window)????
JavaScript + ES6 面试真题 (opens new window)????
前端进阶 面试真题(浏览器、性能、安全) (opens new window)????
Vue、React 面试真题 (opens new window)????
全栈面试真题 (opens new window)????
面试方法论 (opens new window)????
#后端开发
TIP
NodeJS
express
koa
egg
基本 API(如 http、fs 等)
commonjs 模块化
框架
调试
SSR
服务端模板,如 ejs artTemplate 等
nuxt.js (Vue SSR)
next.js(React SSR)
常用
redis
MySQL
mongodb
nginx(反向代理、负载均衡)
数据库
Docker
日志分析
serverless
Deno
小程序开发
PWA
跨端(如 RN Weex)
客户端 electron
企业项目技术解决方案
TIP
紧跟市场需求、渐进式,多端跨平台,系统性,企业级项目解决方案
参考阅读:
最新 Web 前端开发学习路线,主要技术栈
这是一套由华为的内部一个小团队打造的一套管路金种子,这套的面试题管理项目是从初级到中级,最后到高级的一个完整版的一个完整版的Java面试,我还是建议你拿走带回去慢慢的看看,,或者是建议带回去慢慢的看和学习。
这是一些大厂经常面试遇到的一些问题,这是我整理好的,如果这些问题你都可以回答出来,那么你就可以一飞冲天了。
一、商城秒杀架构设计
二、mysql数据库架构发展历程
三、MySQL的扩展性瓶颈
四、为什么要使用NOSQL NOT ONLY SQL
五、传统RDBMS VS NOSQL
六、NOSQL 数据库的类型
七、阿里巴巴中文站商品信息如何存放
八、数据的水平拆分和垂直拆分
九、分布式事务
十、BitMap
1000道大厂面试题已经录制成视频。每一道题目都有详细的视频讲解,包括答案已经整理成了文档。
Redis与Memcached的区别传统MySQL+ Memcached架构遇到的问题实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。2.Memcached与MySQL数据库数据一致性问题。3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。4.跨机房cache同步问题。众多NoSQL百花齐放,如何选择最近几年,业界不断涌现出很多各种各样的NoSQL产品,那么如何才能正确地使用好这些产品,最大化地发挥其长处,是我们需要深入研究和思考的问题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解决以下几种问题1.少量数据存储,高速读写访问。此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。2.海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。3.这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路。前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。4.Schema free,auto-sharding等。比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,并且支持auto-sharding等功能,比如mongodb。面对这些不同类型的NoSQL产品,我们需要根据我们的业务场景选择最合适的产品。Redis适用场景,如何正确的使用前面已经分析过,Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。2 Redis支持数据的备份,即master-slave模式的数据备份。3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。抛开这些,可以深入到Redis内部构造去观察更加本质的区别,理解Redis的设计。在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。Redis只会缓存所有的 key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计 算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以 保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存 中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个 操作,直到子线程完成swap操作后才可以进行修改。使用Redis特有内存模型前后的情况对比:VM off: 300k keys, 4096 bytes values: 1.3G usedVM on: 300k keys, 4096 bytes values: 73M usedVM off: 1 million keys, 256 bytes values: 430.12M usedVM on: 1 million keys, 256 bytes values: 160.09M usedVM on: 1 million keys, values as large as you want, still: 160.09M used当 从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。 这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行 批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程 池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。如果希望在海量数据的环境中使用好Redis,我相信理解Redis的内存设计和阻塞的情况是不可缺少的。补充的知识点:memcached和redis的比较1 网络IO模型Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。(Memcached网络IO模型)Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。2.内存管理方面Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除,原因可以参考Timyang的文章:/memcached/)。Memcached的客户端软件实现非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang, Lua等。当前Memcached使用广泛,除了LiveJournal以外还有Wikipedia、Flickr、Twitter、Youtube和WordPress等。在Window系统下,Memcached的安装非常方便,只需从以上给出的地址下载可执行软件然后运行memcached.exe –d install即可完成安装。在Linux等系统下,我们首先需要安装libevent,然后从获取源码,make make install即可。默认情况下,Memcached的服务器启动程序会安装到/usr/local/bin目录下。在启动Memcached时,我们可以为其配置不同的启动参数。1.1 Memcache配置Memcached服务器在启动时需要对关键的参数进行配置,下面我们就看一看Memcached在启动时需要设定哪些关键参数以及这些参数的作用。1)-p Memcached的TCP监听端口,缺省配置为11211;2)-U Memcached的UDP监听端口,缺省配置为11211,为0时表示关闭UDP监听;3)-s Memcached监听的UNIX套接字路径;4)-a 访问UNIX套接字的八进制掩码,缺省配置为0700;5)-l 监听的服务器IP地址,默认为所有网卡;6)-d 为Memcached服务器启动守护进程;7)-r 最大core文件大小;8)-u 运行Memcached的用户,如果当前为root的话需要使用此参数指定用户;9)-m 分配给Memcached使用的内存数量,单位是MB;10)-M 指示Memcached在内存用光的时候返回错误而不是使用LRU算法移除数据记录;11)-c 最大并发连数,缺省配置为1024;12)-v –vv –vvv 设定服务器端打印的消息的详细程度,其中-v仅打印错误和警告信息,-vv在-v的基础上还会打印客户端的命令和相应,-vvv在-vv的基础上还会打印内存状态转换信息;13)-f 用于设置chunk大小的递增因子;14)-n 最小的chunk大小,缺省配置为48个字节;15)-t Memcached服务器使用的线程数,缺省配置为4个;16)-L 尝试使用大内存页;17)-R 每个事件的最大请求数,缺省配置为20个;18)-C 禁用CAS,CAS模式会带来8个字节的冗余;2. Redis简介Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。Redis使用C语言开发,在大多数像Linux、BSD和Solaris等POSIX系统上无需任何外部依赖就可以使用。Redis支持的客户端语言也非常丰富,常用的计算机语言如C、C#、C++、Object-C、PHP、Python、Java、Perl、Lua、Erlang等均有可用的客户端来访问Redis服务器。当前Redis的应用已经非常广泛,国内像新浪、淘宝,国外像Flickr、Github等均在使用Redis的缓存服务。Redis的安装非常方便,只需从bin目录下。在启动Redis服务器时,我们需要为其指定一个配置文件,缺省情况下配置文件在Redis的源码目录下,文件名为redis.conf。php面试题 memcache和redis的区别
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流