当前位置: 首页 > news >正文

crc32算法_业务开发中你用到了哪些算法?

S哥:今天去面试啦,简历上写了一句“熟练运用算法于应用中”,面试官问我时,却不知道说啥(很尴尬)......

ME:可以说说 hash 算法,先说说分库分表;然后一致性 hash;然后升华......

29558cba7244ec7070c6d959a3ce60b6.png

年底了,确实有很多默默看机会的盆友,开始躁动了起来。身边很多选手也不例外,身边的 S 哥为了彰显自己牛掰,简历上斗胆撂了一句“熟练运用算法于应用中”,但是当面试官问起时,S 哥却被问的一愣一愣哒。

鉴于此,不妨分享一下我的回答思路,看能否帮你争取点面试分。

先说一个离我们比较近的应用场景。估计多数人还没有经历过分库分表,但是个人感觉,截止到目前稍微有点量级的应用,数据库可能没有拆分,但是订单表应该也被拆分的稀碎啦,这么说你可能不理解,不妨举个栗子。

起初,原有的一张 T_ORDER 足矣满足业务需求,但是随着业务推广,订单表的数据日益增多,数据查询势必会越来越慢,性能是个问题。好的解决方案势必是分开,例如分成 T_ORDER_0、T_ORDER_1、T_ORDER_2 三张滚动表,但是到底该怎么实现这么个策略呢?


码代码的不写点代码,确实不是那么回事儿!

f88c1bc4799efa55aa8dc0cf6c71eb3a.png

上面的代码来自于实际应用,可能代码不雅观,但是线上跑的却很好,所以也无心修理它。但是无论怎么跑,结果总会是 T_ORDER_0、T_ORDER_1、T_ORDER_2 来回切换。

好了,知道了如何分表了,但是如果数据量依旧很大,是不是应该考虑分库啦,不多说,直接摘实际应用中一个较全的代码进行示意。

b9ac4b8613f6e4587155c11635abc25e.png

针对上面代码,咱们稍微抽象一点的去说一下(这块需要顿悟,尤其是数学不太好,脑子空间不够的同学,不妨拿个铅笔,算一算)。

抽象正式开始啦,若有 M 个数据库主节点,数据表总计拆分成 N 张子表,拆表字段数值化转换为 X,则数据库实例的序号为 X % M ;数据表的序号为 X % N。

例如:当主节点个数 M=6,总计拆表数 N=1200 时(单库内子表个数为 200),则数据库实例的序号 X % 6;数据表的序号为 X % 1200。

于是:序号为 0 的数据库中,会有序号为 0,6,12,18… 的数据表;序号为 1 的数据库中,会有序号为 1,7,13,19… 的数据表;以此类推。

拆表字段数值化机制:取拆表依据字段,对其取 crc32,之后取绝对值,即为上述“分库分表公式”中的 X。


好了,到这距离咱们研发最近的 hash 算法就聊明白了,到这估计面试官也被你搞懵啦!


但是面试中经常会谈及一致性 hash,到底要聊的是个啥呢?Memcached 里面用到了吗?Nginx 里面用到了吗?MapReduce 里面用到了吗?数据倾斜又是怎么回事呢?

未完待续,且听下回分解。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ORA-00600 关联规则建模错误
  • python基于值得内存_浅谈Python 对象内存占用
  • 我的最大收获
  • 电力装置的继电保护和自动装置设计规范_电力工程的继电保护和安全自动装置设计原则(注电多选373)...
  • 好差的英语
  • 订阅发布延时_网关实现灰度发布
  • 本地引入bootstrap_如何引入 Spring Cloud AliCloud ACM
  • Windows XP 中提供的快捷键列表[比较全]
  • python is beautiful_Python学习之beautifulsoup4库的使用
  • Sysinternals Suite 工具下载
  • python朋友圈广告怎么这么火_利用Python让你的微信朋友圈与众不同,更加高大上...
  • 这个世界,有点创新真难啊
  • python2和python3的不同点_Django python2和python3的区别
  • 笑林广记
  • python绘图库seaborn_Python 绘图总结(seaborn库的使用) (上)
  • 「译」Node.js Streams 基础
  • centos安装java运行环境jdk+tomcat
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • exports和module.exports
  • git 常用命令
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • IndexedDB
  • Java 最常见的 200+ 面试题:面试必备
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • MYSQL 的 IF 函数
  • Python socket服务器端、客户端传送信息
  • Python学习之路16-使用API
  • use Google search engine
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 机器学习中为什么要做归一化normalization
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 面试总结JavaScript篇
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用权重正则化较少模型过拟合
  • 想写好前端,先练好内功
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 用element的upload组件实现多图片上传和压缩
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 阿里云移动端播放器高级功能介绍
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (c语言+数据结构链表)项目:贪吃蛇
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (k8s中)docker netty OOM问题记录
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)图像的%2线性拉伸
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一一四)第九章编程练习
  • (转)用.Net的File控件上传文件的解决方案
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿