SegmentFault 最新的文章 |
- Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?
- 高效求职,直通技术leader,思否招聘内推季正式开启!
- Three.js 火焰效果实现艾尔登法环动态logo 🔥
- 2022招聘季|如何写一份好的前端面试简历?
- 2022招聘季 | 怎么准备面试?面试官一般会问些什么问题? | web 前端
- 5年经验(专升本)入职B站分享
- 读Flink源码谈设计:流批一体的实现与现状
- 编程中常用的加密算法
- 老板让我 7 天研究一个 Plausible 统计
- 欢迎体验 | Android 13 开发者预览版 2
- 小推理:React18比老版React更优秀的一个地方
Posted: 21 Mar 2022 08:08 PM PDT 原始数据存储在 DB 中(如 MySQL、Hbase 等),但 DB 的读写性能低、延迟高。 比如 MySQL 在 4 核 8G 上的 TPS = 5000,QPS = 10000 左右,读写平均耗时 10~100 ms。 用 Redis 作为缓存系统正好可以弥补 DB 的不足,「码哥」在自己的 MacBook Pro 2019 上执行 Redis 性能测试如下:
TPS 和 QPS 达到 10 万,于是乎我们就引入缓存架构,在数据库中存储原始数据,同时在缓存总存储一份。 当请求进来的时候,先从缓存中去数据,如果有则直接返回缓存中的数据。 如果缓存中没数据,就去数据库中读取数据并写到缓存中,再返回结果。 这样就天衣无缝了么?缓存的设计不当,将会导致严重后果,本文将介绍缓存使用中常见的三个问题和解决方案:
缓存击穿(失效)高并发流量,访问的这个数据是热点数据,请求的数据在 DB 中存在,但是 Redis 存的那一份已经过期,后端需要从 DB 从加载数据并写到 Redis。 关键字:单一热点数据、高并发、数据失效 但是由于高并发,可能会把 DB 压垮,导致服务不可用。如下图所示: 解决方案过期时间 + 随机值对于热点数据,我们不设置过期时间,这样就可以把请求都放在缓存中处理,充分把 Redis 高吞吐量性能利用起来。 或者过期时间再加一个随机值。 设计缓存的过期时间时,使用公式:过期时间=baes 时间+随机时间。 即相同业务数据写缓存时,在基础过期时间之上,再加一个随机的过期时间,让数据在未来一段时间内慢慢过期,避免瞬时全部过期,对 DB 造成过大压力 预热预先把热门数据提前存入 Redis 中,并设热门数据的过期时间超大值。 使用锁当发现缓存失效的时候,不是立即从数据库加载数据。 而是先获取分布式锁,获取锁成功才执行数据库查询和写数据到缓存的操作,获取锁失败,则说明当前有线程在执行数据库查询操作,当前线程睡眠一段时间在重试。 这样只让一个请求去数据库读取数据。 伪代码如下:
缓存穿透缓存穿透:意味着有特殊请求在查询一个不存在的数据,即不数据存在 Redis 也不存在于数据库。 导致每次请求都会穿透到数据库,缓存成了摆设,对数据库产生很大压力从而影响正常服务。 如图所示: 解决方案
BloomFilter 要缓存全量的 key,这就要求全量的 key 数量不大,10 亿 条数据以内最佳,因为 10 亿 条数据大概要占用 1.2GB 的内存。 说下布隆过滤器的原理吧 BloomFilter 的算法是,首先分配一块内存空间做 bit 数组,数组的 bit 位初始值全部设为 0。 加入元素时,采用 k 个相互独立的 Hash 函数计算,然后将元素 Hash 映射的 K 个位置全部设置为 1。 检测 key 是否存在,仍然用这 k 个 Hash 函数计算出 k 个位置,如果位置全部为 1,则表明 key 存在,否则不存在。 如下图所示: 哈希函数会出现碰撞,所以布隆过滤器会存在误判。 这里的误判率是指,BloomFilter 判断某个 key 存在,但它实际不存在的概率,因为它存的是 key 的 Hash 值,而非 key 的值。 所以有概率存在这样的 key,它们内容不同,但多次 Hash 后的 Hash 值都相同。 对于 BloomFilter 判断不存在的 key ,则是 100% 不存在的,反证法,如果这个 key 存在,那它每次 Hash 后对应的 Hash 值位置肯定是 1,而不会是 0。布隆过滤器判断存在不一定真的存在。 缓存雪崩缓存雪崩指的是大量的请求无法在 Redis 缓存系统中处理,请求全部打到数据库,导致数据库压力激增,甚至宕机。 出现该原因主要有两种:
缓存大量数据同时过期数据保存在缓存系统并设置了过期时间,但是由于在同时一刻,大量数据同时过期。 系统就把请求全部打到数据库获取数据,并发量大的话就会导致数据库压力激增。 缓存雪崩是发生在大量数据同时失效的场景,而缓存击穿(失效)是在某个热点数据失效的场景,这是他们最大的区别。 如下图: 解决方案过期时间添加随机值 要避免给大量的数据设置一样的过期时间,过期时间 = baes 时间+ 随机时间(较小的随机数,比如随机增加 1~5 分钟)。 这样一来,就不会导致同一时刻热点数据全部失效,同时过期时间差别也不会太大,既保证了相近时间失效,又能满足业务需求。 接口限流 当访问的不是核心数据的时候,在查询的方法上加上接口限流保护。比如设置 10000 req/s。 如果访问的是核心数据接口,缓存不存在允许从数据库中查询并设置到缓存中。 这样的话,只有部分请求会发送到数据库,减少了压力。 限流,就是指,我们在业务系统的请求入口前端控制每秒进入系统的请求数,避免过多的请求被发送到数据库。 如下图所示: Redis 故障宕机一个 Redis 实例能支撑 10 万的 QPS,而一个数据库实例只有 1000 QPS。 一旦 Redis 宕机,会导致大量请求打到数据库,从而发生缓存雪崩。 解决方案对于缓存系统故障导致的缓存雪崩的解决方案有两种:
服务熔断和限流 在业务系统中,针对高并发的使用服务熔断来有损提供服务从而保证系统的可用性。 服务熔断就是当从缓存获取数据发现异常,则直接返回错误数据给前端,防止所有流量打到数据库导致宕机。 服务熔断和限流属于在发生了缓存雪崩,如何降低雪崩对数据库造成的影响的方案。 构建高可用的缓存集群 所以,缓存系统一定要构建一套 Redis 高可用集群,比如 《Redis 哨兵集群》或者 《Redis Cluster 集群》,如果 Redis 的主节点故障宕机了,从节点还可以切换成为主节点,继续提供缓存服务,避免了由于缓存实例宕机而导致的缓存雪崩问题。 总结
参考资料 https://segmentfault.com/a/11... https://cloud.tencent.com/dev... | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 16 Mar 2022 12:05 AM PDT 金三银四招聘旺季悄然而至,企业渴望高效招聘,快速匹配优质开发者,广大程序员们也在 "伺机而动" 为更好的职业发展谋求新机。 如何帮助开发者更高效地获取企业信息? 避开"内卷重灾区",还有哪些值得关注的"宝藏公司"? 作为科技企业和开发者沟通的桥梁,为解决企业与开发者无法快速"了解"彼此的困扰,SegmentFault 思否正式开启本年度最大型线上活动:「宝藏公司内推季」。 本次活动分为两期,第一期精心筛选出五家宝藏级公司,共 上百个程序员 HC,薪资高达 50 万/年,福利更是多到数不清: "远程办公"、"弹性工作"、"公款旅游"、"带薪撸猫"、"五险一金全额缴"、"补充商业险+子女补充医疗"...... 你看,它们虽不是所谓的"大厂、BAT",但确有比肩大厂的机遇和气魄。如此适合开发者"撒欢儿"的宝藏公司,你心动了吗?~ 本次活动将以线上直播的方式,于 3 月 26 日 下午 2 点进行,感兴趣的小伙伴们一定要先进群。群内会分享岗位情报、开播提醒、简历投递引导等信息,帮助你更全面的了解每一家企业,更快速的匹配到心仪岗位 ~ 人在职场,总要看新机会,暂时没有求职计划的同学也欢迎进群围观,看宝藏公司如何招揽优秀人才。 进群了解更多信息 宝藏公司揭晓StreamNativeStreamNative 是一家开源基础软件公司,由 Apache 软件基金会顶级项目 Apache Pulsar 创始团队组建而成,围绕 Pulsar 打造下一代云原生批流融合数据平台。 作为 Apache Pulsar 商业化公司,StreamNative 专注于开源生态和社区构建,致力于前沿技术领域的创新,创始团队成员曾就职于 Yahoo、Twitter、Splunk、EMC 等知名大公司。2021 年 10 月,StreamNative 宣布完成 2300 万美元 A 轮融资。 StreamNative 此次开放的职位包括 Platform Engineer、Cloud Product Engineer,薪资范围 25k - 50k 不等。 除此之外,在 StreamNative 你还将获得:
这家宝藏公司你"心动"了吗?点击了解更多信息 ONESONES 成立于2015年,是国内领先的企业级研发管理解决方案提供商。 2021年,ONES 连续完成3轮总计近1亿美元融资,是国内研发管理领域累计融资金额最多、历史融资速度最快的公司。 凭借专业的产品及服务,ONES 已成功帮助小米、浪潮软件、贵州茅台、上汽、招商基金等多家500强在内的企业实现高效研发。 ONES 此次开放的职位包括 Go 后端工程师、Web前端工程师,薪资范围 20k - 40k 不等。 三句话带你了解 ONES:
这家宝藏公司你"心动"了吗?点击了解更多信息 涛思数据北京涛思数据科技有限公司(TAOS Data)瞄准日益增长的物联网数据市场,专注时序空间大数据的存储、查询、分析和计算,不依赖任何开源或第三方软件,开发了拥有自主知识产权、100% 自主可控的高性能、分布式、支持 SQL 的时序数据库 TDengine。 涛思的核心产品 TDengine 在 GitHub 上已累计获得 17.9k Star,目前在国内时序数据库领域位居 Top 1,国际 CNCF 数据库领域位居 Top 5。 在融资方面,公司已经获得投资方经纬中国、红杉资本、GGV 纪源资本、明势资本、蛮子基金、永辉瑞金等多家机构的近 7000 万美元的投资,深受资本市场青睐。 涛思数据此次开放的职位包括流式计算资深研发工程师、数据库内核资深研发工程师,年薪 50W+。 为什么要来涛思数据?
这家宝藏公司你"心动"了吗?点击链接了解更多信息 支流科技API7.ai 是一家提供 API 处理和分析的开源基础软件公司,基于 Apache APISIX 提供 API 网关、Kubernetes Ingress Controller 和服务网格产品。 致力为全球企业管理并可视化 API 和微服务等关键业务流量,通过大数据和人工智能(AI)加速企业业务决策,驱动数字化转型。 Apache APISIX 是API7.ai 2019年捐赠给 Apache 软件基金会的顶级项目,全球已经有数百家企业用户在使用 Apache APISIX 处理核心的业务流量,其中包括 NASA、瑞士电信、欧盟数字工厂、微博、腾讯、中国移动、奈雪的茶、WPS、爱奇艺、B站等国内外知名企业。 支流科技此次开放的职位包括SRE工程师、服务端开发工程师,薪资范围 15k - 45k 不等。 除此之外,在支流科技你还将获得超多福利:
这家宝藏公司你"心动"了吗?点击链接了解更多信息 维格表
vika维格在创立初期先后获得来自 IDG 、高瓴、五源、天图、靖亚等一线投资机构累计 4 轮的上亿元融资,目前已经服务海内外9000多家企业和数以万记的组织。 作为全新的可视化关系型数据库,vika维格表始终以产品驱动增长,上线 14 个月即为全球范围内 10000+ 企业提供数字化服务,涵盖电商、教育、科技、500强、国企、政府单位等。 维格表此次开放的职位包括高级前端工程师、高级后端工程师,薪资范围 15k - 40k 不等。 除此之外,在维格表你还将获得超多福利:
这家宝藏公司你"心动"了吗?点击链接了解更多信息 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 21 Mar 2022 06:18 PM PDT 声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。 背景《艾尔登法环》是最近比较火的一款游戏,观察可以发现它的 效果实现效果如 在线预览: 已适配:
实现
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 13 Mar 2022 05:34 PM PDT 项目地址: https://github.com/Wscats/CV 简历的本质在写简历之前,我们必须清楚的了解一件事情,那就是简历是什么?
当然,绝大部分简历的形式,就是我们所熟知的,是一篇文章。即使你通过其他方式获得了面试,当你入职的时候,还是要有这么一份纸质简历的,所以不要想着偷懒。 其实简历不只是表现自己,更是传递以下三个信息,增强通过率。
正如你抉择跳槽,思考要不要留在这个公司的时候,你也可能考虑下面三点
当然企业和你的相互选择其实正如上面几点中的考量和博弈,当然面试是平等的,是相互选择的结果,所以有你对企业的考量,也有企业对你的考量 回归到写简历,和很多人在大学写议论文写作文是不同的,过分的论证会显得自夸,反而容易引起反感,所以要点到为止。这里的技巧是,提供论据,把论点留给阅读简历的人自己去得出。放论据要具体,最基本的是要数字化,好的论据要让人印象深刻。 举个例子,下边内容是虚构的: 2015年( 有同学问,如果我在项目里边没有那么显赫的成绩可以说怎么办?讲不出成绩时,就讲你的成长。因为学习能力也是每家公司都看中的东西。你可以写你在这个项目里边遇到了一个什么样的问题,别人怎么解决的,你怎么解决的,你的方案好在什么地方,最终这个方案的效果如何。 具体、量化、有说服力,是技术简历特别需要注重的地方。 (以上内容在写完简历后,对每一段进行评估,完成后再删除) 联系方式(HR会打印你的简历,用于在面试的时候联系,所以联系方式放到最上边会比较方便)
个人信息
工作经历工作经历按逆序排列,最新的在最前边, 123公司 ( 2016年9月 ~ 2017年9月 )456项目我在此项目负责了哪些工作,分别在哪些地方做得出色/和别人不一样/成长快,这个项目中,我最困难的问题是什么,我采取了什么措施,最后结果如何。这个项目中,我最自豪的技术细节是什么,为什么,实施前和实施后的数据对比如何,同事和领导对此的反应如何。 789项目我在此项目负责了哪些工作,分别在哪些地方做得出色/和别人不一样/成长快,这个项目中,我最困难的问题是什么,我采取了什么措施,最后结果如何。这个项目中,我最自豪的技术细节是什么,为什么,实施前和实施后的数据对比如何,同事和领导对此的反应如何。 其他项目(每个公司写2~3个核心项目就好了,如果你有非常大量的项目,那么按分类进行合并,每一类选一个典型写出来。其他的一笔带过即可。) 根据上面的模板你可以这样来写
自我评价最好突出自己的优势,比如学习能力,解决问题能力,带队能力,沟通能力和技术能力等等
详细的你也可以这样来
开源项目和作品选取你自己Github上的某个开源项目即可,当然开源项目最好写清楚文档,比如安装方法,核心代码的分析(这一段用于放置工作以外的、关键来证明你的能力的材料,也可以理解为其他工程师或者开源社区对你的认可度) 开源项目(对于程序员来讲,没有什么比Show me the code能有说服力了)
技术文章(挑选你写作或翻译的技术文章,好的文章可以从侧面证实你的表达和沟通能力,也帮助招聘方更了解你)
技能清单(我一般主张将技能清单写入到工作经历里边去。不过很难完整,所以有这么一段也不错)
例如你可以这样写,当然你得根据自己的个人情况进行修改
当然再举个例子(精通慎用!熟悉可以多用,不够自信就用了解吧,额哼)
这里尽量不要重复叙述相同的技能点,保持好每一条都是独特的,每一条描述出现的英文技能点关键词尽量保持大小统一,比如 参考技能关键字本技能关键字列表是在简历和招聘信息中统计出来的高频词。如果您的简历要投递给有机器(简历筛选系统)和非机器(不懂技术的HR)筛选简历环节的地方,请一定从下边高频关键词中选择5~10个适合你自己的。
简历注意项
在投简历之前必须检查大小写字母是否统一,中英文标点符号要统一,专业词汇是否正确,是否有错别字,细节决定成败,态度决定一切,投简历之前不检查清楚会让面试管觉得你不尊重面试,这会轻易被淘汰! 由于现在比较少手写纸质版简历,但如果需要自己用笔来写的内容(比如签名,笔试题)不要潦草涂乱,字迹要工整,因为字是代表你的形象,也是面试官心情的起点。 面试表现千言万语总结为三条
面试是平等的,不是上下级的汇报,也不只是简单的一问一答(对方的设问,你也可以有疑问) 面试题参考这里收录了142多张现场纸质面试题集合,来自于不同面试者应聘不同公司的真实记录 面试前学习片段和笔记其他参考特别鸣谢最后最近比较忙,后面有时间继续整理,感谢您花时间阅读,期待你能找到一份不错的前端工作,加油!谢谢。如果本文能带您一丝帮助或者启发,请不要吝啬你的赞和Star,你的肯定是我前进的最大动力💞 本文参与了 SegmentFault 思否征文「如何"反杀"面试官?」,欢迎正在阅读的你也加入。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2022招聘季 | 怎么准备面试?面试官一般会问些什么问题? | web 前端 Posted: 20 Mar 2022 05:47 AM PDT 前两天北京下雪了,很冷。2022 招聘季,好像也比往年冷一些。 2021 年 K12 的大量裁员,腾讯、快手、字节、滴滴、蘑菇街也在裁员。
如果你关心上面的问题,并且你的目标位置不超出我的能力范围(高级工程师、阿里P6、字节2-1)。我会以我经验给你一些建议 面试流程
怎么准备面试?前期准备个人介绍每一场面试第一个环节都是「请做一下自我介绍」,所以这个问题一定要提前准备好。 如何准备?个人介绍重点是什么?我们先从面试官角度来看一下面试官想知道什么?
个人介绍案例接下来我们就可以针对面试官写一份合适的自我介绍
知识储备知识储备是我们面试成功的必需品。主要分为两部分:护城河、扩展。这里主要还是靠平时积累,面试时针对高频且不会的加强记忆。 接下来我们还是针对前端面试来举例。 前端护城河什么是护城河?这都不会干屁前端! 没办法就是这么卷,所以这里只能去卷一些八股文。 但是我推荐还是由易到难,高频到低频。
扩展这里一般就不局限于前端,也不要求全部掌握,但是一般都会有一些擅长点。
算法练习算法练习没什么好说的,简单必须会,中等也要做一些,困难看个人能力,掌握常见数据结构。一般就是推荐力扣、牛客。 学习路径的话是先了解数据结构,然后针对性做题,做不出来看题解。
项目复盘项目一般是为了看看你做过什么,有什么出色的地方,不是为了听你说一堆没用的。 这里属于一个没有标准答案的题,也是一个可以提前准备的题。 我面试的时候准备了三个内容,并且对具体实现方法都做了细致的应对方案。
常见问题准备一般来说会有一些高频问题,我们可以提前准备一下。当然具体还是要看你的技术栈是什么,你可以针对你的技术栈做特殊复习。
面试前准备如果说我们简历、知识储备、常见问题都准备就绪,那么接下来我们就可以开始以战养战。 投递岗位不建议海投,推荐你选择二线、一线、大厂,把自己心仪的公司放在第二三周。
可以选择适合自己的岗位投递,并不是比如说快手所有人都在做App,也会有做面向机构的服务平台,也会有面向电商的服务平台,还有对内的基建中台等等。选择一个适合自己的岗位比乱投强太多了 面试真题(针对性搜索)这个就属于玩赖了,比如说你面阿里,可以针对性去找一些阿里一面面经,最好把岗位部门带上(会有意外惊喜哟) 根据我面过的几家公司,网上是有真题的。 如果你常混社区的话,你甚至可以问问面过的前辈 面试后准备面试完不代表着结束,收到 offer 才是结束。 面试复盘所以这口气我们不能松,可以在面试后把所有题都记录下来,然后看看自己那个题掌握不够全面。
真题整理上面说了复盘的重要性,也说了需要整理真题,这里主要是需要你注意分类,而且需要看到题后的内容。 有时候面试题只是考点的一个应用场景,所以我们需要看到背后的知识,不只是把面试官问你的问题搞会。 一般来说面试题会符合部门场景,做 PC 的部门不可能问你移动端适配原理。
面试中有哪些最最最常见的坑简历到了我个人擅长的位置了。哈哈哈,我看过成百上千的简历,基本没有看错的。
面试准备(面试题、算法题权重问题)建议你先准备基础知识题,然后常见题,最后准备算法题。一定要记住由易到难。 如果不是高级、专家岗位,算法都可以暂时放弃。
面试中
面试官一般会问些什么问题?一面(基础知识)一面一般是同级同事、同级领导(斜线领导),属于主力开发,业务经验也比较足。一面侧重基础知识
二面(项目)二面一般是不同组同事,一般来说是跨组交叉面试,当然会有可能不是前端。二面一般更侧重项目
这里可以看到,如果一面过了,二面基本是稳的。 因为一二面本身级别差不多,有可能面试官不是同技术(java)、升职不是技术(产品) 三面三面一般是直系领导(50人至100人团队负责人),可能是前端,也可以是其他端,只能说肯定是个技术人员。
一般来说高级工程师就只有三面,三面的这个人就是决定你是否能入职的那个人,三面面试官一般也是一面面试官的直系领导。 HR 面试
问面试官哪些问题?一面一面面试官一般就是你的同事,也是主力开发,是真正的打工人。所以这在一面环节你可以多问一些你关心的内容
二面二面面试官因为存在交叉面试的情况,所以可用信息不太多。
三面三面面试官是你的直属领导,能管得事也比较多,你可以问一些其他的东西。
本文参与了 SegmentFault 思否征文「如何"反杀"面试官?」,欢迎正在阅读的你也加入。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 18 Mar 2022 10:14 PM PDT 跳槽周期跨度什么时候动了想法大概在去年11月份的时候,我负责的业务线一直做不出成绩。而且整个公司的前端技术设施,都是我一手搭建出来的,再待在公司,没什么可成长的空间,就想跳槽了,期间考虑了几个可能性:
面了哪些公司
复习备战花了多久,面试到入职,花了多久11月 - 2月 一直在陆陆续续准备,持续了 3 个月,主要是准备复习、复盘、刷算法 做了哪些准备主要准备了以下几个方面:
复习了哪些内容,刷了哪些题
八股文这块没啥好说的,把各大社区各位大神经常分享的一些文章看了下,再就是针对计算机基础知识和网络基础知识,做了一些总结,大概看了下面这些文章: 编程刷了下基本会手写的面试题以及再把面试过程中遇到的手写题总结下,基本上都还好 算法算法这块不是我的长项,基本没接触,主要是把 LeetCode 热题 HOT 100,Easy 难度简单刷了下,针对大厂频出的算法题,看不懂的,就背答案,比如经典的反转二叉树、任意两个数的和等于 Target、反转单向链表等 后面根据一些面经和文档,比如:前端年后面试真题,会80%直接进大厂副本,做了一些针对性地练习和巩固 框架React 部分复习了 setState原理、 diff 原理,深入了 hooks 和 fiber 原理,当然这里的深入不是去读源码,因为时间来不及,而是参考了比较多的文章: Mobx 由于我日常使用比较多的,也被面试官深入问过,就自己搭建过前端脚手架和看了下 React 进阶实践指南里面有一篇讲了 Mobx。主要了解框架的主体逻辑、响应式原理、依赖收集的实现 博客由于本人经常会写播客,这点在投递简历的时候,是非常大的一个加分项,在多个技术社区有同名账号,经常发表一些文章,会受到面试官的青睐,我最近的面试,都有被面试官提到,你的博客写的不错,而且面试官也会从你的博客中来提问你,我就被问到以下问题:
这些问题,我都在博客上记录了,所以都是信手拈来 重点补了哪些能力和短板
面试中暴露了哪些问题,怎么应对的思考和表达的连续性前期热身的时候,准备内容的结构化不足,遇到有些没有准备到的问题,临场思考和组织,或者一遍表述一遍思考,导致表达的结构性和连续性较差,表现上就是重点不够、啰嗦、回答不上 解决:针对几大类问题梳理了整体的思维导图,表达的时候,跟进面试官的侧重点,挑选关键点进行结构 过往经历的思考不足当面试官聊到过往短板问题或者低谷经历时,一开始的回答有点浮于表面,并且有一些规避的回答,受到了面试官的质疑 解决:认真、客观地重新梳理了对应的问题,从主观、客观层面进行重新组织语言进行回答 印象深刻的事情每个公司面下来的感受
哪些经历让自己很难熬字节和七牛云的 offer 一个都没拿到字节面的感觉还可以,第二天就挂了,很难受,心态有点蹦 最终抉择当时手头上只有掌门一对一的 offer ,掌门一对一,HR 在催我入职, B站和网易严选还没有面完,无法拒绝,很纠结,当时做的选择就是,先入职掌门一对一,哪会儿中通联系上我,我就再面了一个中通,拿到了中通的 offer,然后再等B站和严选的流程了,自己对严选是非常意向的,但严选终面完还是被挂,就很头疼,在面严选的过程,B站正式 offer 发了,只能选择B站 如何克服了过程中的困难
其他的心得体会和经验面试的 4 个环节:简历准备 - 投递策略 - 面试和复盘 - offer 谈判和选择
总结跳槽是一项心力、体力、脑力都必须在线的活动 资料参考和分享最后也欢迎大家关注我的博客 高频面试题整理CSS
JS
浏览器
React
状态管理
微信小程序
打包工具
设计模式
编程题
算法题
其他
本文参与了 SegmentFault 思否征文「如何"反杀"面试官?」,欢迎正在阅读的你也加入。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 16 Mar 2022 05:38 PM PDT 本文首发于泊浮目的语雀:https://www.yuque.com/17sing
0.背景:Dataflow之前在Dataflow相关的论文发表前,大家都往往认为需要两套API来实现流计算和批计算,典型的实现便是Lambda架构。 由于早期的流处理框架并不支持Exactly Once,导致流处理的数据并不精准。在这个基础上,一旦数据出现问题,则要导致大量的数据重放——这是因为事件往往是有时序要求的。因此,Lambda往往会通过流处理框架获取不是特别精准的结果,同时也会定时运行批处理程序,来获取更精准的结果——当更精准的结果出来时,我们就不需要前者了。 但这也带来的新的问题,所有的视图都需要流、批处理层各做一次,代码也要写两套,这带来了数据口径不同。可以说是在计算机资源以及人力资源上至少加了两倍的开销。 Kappa提出了将所有数据落到Kafka上,将存储模型与计算模型统一,但牺牲了时间——当数据量大时,回溯计算的压力巨大。 直到 1. Flink的实现Flink比起其他的流处理框架,更优在两点:
1.1 编程模型统一的背后编程模型的统一具体体现在Flink SQL以及DataStream上。我们可以用相同的SQL or 几乎相同的代码跑流与批的任务。尤其是SQL,比起DataStream在声明式上更甚。因此用户在使用它们时,仅仅需要描述自己想要什么,而不是自己要做什么。具体做什么的事,Flink框架会帮你搞定。 在Flink框架上,目前主要解决了以下问题:
1.2 Checkpoint不是银弹Checkpoint是Flink框架中重要的容错机制,它的一个前提要求是数据源可重复读。在数仓场景下,虽然绝大多数情况下数据都不会发生变化——但也会有冷数据处理机制以及一些merge发生。这将对数据可重读造成一定的挑战。另外,在笔者负责的产品QMatrix中,对数据库做全量迁移时也会遇到类似的挑战:T1时刻读到的全量数据为集合1,而T2时刻读到的全量数据则为集合2。而MVVC也只能维持在一个session中。 上面描述的是在数据源要考虑的容错条件。在数据已经全部流入任务时,容错机制也需要重新考虑——尽量避免重复读取数据源以及上游任务的重算。因此社区引入了可插拔的Shuffle Service来提供Shuffle数据的持久用以支持细粒度的容错恢复——FLIP-31: Pluggable Shuffle Service。 2. 剩下的问题:数据来源不统一上述流批衔接的前提是数据源被分为了流数据源和批数据源。那么口径便是不统一的,这会带来一些对接成本。 目前流行的方案会采用数据湖(如IceBerg、Hudi、DeltaLake)来做流批数据的统一,并且由于大多数据湖都支持 另外,Pravega这种以流批一体存储为设计目标的软件可能也是解决方案之一。 3. 小结在本文中,笔者和大家一起了解了流批一体的来源,以及Flink社区在流批一体中做出的努力。此外,我们也看到了有些问题并不是Flink这个框架可以解决的,需要整个大数据生态来一起演进,走向流批一体。 在文章的最后,感谢余空同学的交流与指导,我们一起写出了这篇文章。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 18 Mar 2022 01:17 AM PDT 前言编程中常见的加密算法有以下几种,它们在不同场景中分别有应用。除信息摘要算法外,其它加密方式都会需要密钥。
密钥密钥(key,又常称金钥)是指某个用来完成加密、解密、完整性验证等密码学应用的秘密信息。 密钥分类
密钥和密码密码一般是由用户生成,具有可读性,可以记忆和存储,常用于软件管理,而密钥是供实现加密算法的软件使用,不需要具备可读性(不过在编程中为了方便阅读都进行Base64)。我们也可以通过密码来生成密钥。 密钥管理
密钥生成jdk 中 jce (Java Cryptography Extension) 包含了加密相关的所有API。 生成对称加密算法的密钥
生成对称非对称加密算法的密钥
密钥协商(Diffie-Hellman) 密钥协商是一种协议,两方或多方在通过该协议建立相同的共享密钥,然后通讯内容进行对称加密传输,而不需要交换密钥。 大致过程:每一方生成一个公私钥对并将公钥分发给其它方,当都获得其他方的公钥副本后就可以离线计算共享密钥。 Java中提供了
信息摘要算法信息摘要算法又叫加密散列算法,加密过程不需要密钥,常见的加密散列算法有MD系列和SHA系列。 一个理想的加密散列函数应该具备以下特性:
MD系列MD5信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的加密散列函数,输出出一个128位(16字节)的散列值(hash value),MD5最初设计为加密散列函数,而目前发现它存在大量漏洞,所以不建议直接用作加密,不过在非加密场景下如:数据完整性校验,文件完整性校验它仍然有广泛的应用。
SHA系列安全散列算法(Secure Hash Algorithm,缩写为SHA)是一个加密散列函数家族,是FIPS(美国联邦信息处理标准)所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。 它们分别包含
对称加密算法对称加密算法,双方持有相同密钥进行加解密,常见的对称加密算法:
DES
3DES3DES(即Triple DES)。是DES算法的加强,它使用3条56位的密钥对数据进行三次加密。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。密钥默认长度
AESAES 高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击,默认密钥长度为 默认
使用
JDK 1.8.0_161 及以上版本默认已经启用无限强度加密:
JDK 1.8.0_161以前版本需要手动安装 jce 策略文件(下载地址) 非对称加密算法非对称加密使用一对密钥,公钥用作加密,私钥则用作解密。关于密钥大小,截至2020年,公开已知的最大RSA密钥是破解的是829位的RSA-250,建议至少使用 2048 位密钥。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 18 Mar 2022 02:25 AM PDT 开始文章前先扯个淡最近在思考统计功能的时候,一开始是寻思着用程序配合mysql来进行存储,但是如果用mysql来存一些比较细节话的数据然后再做统计,数据量会非常庞大,然后又思考用mysql存储数据,然后用定时脚本或队列来按照具体要求更新到redis中,这样查询就很快了。 后来想起我们本身用的 最后没有办法,我观察了 行式数据库 vs 列式数据库结构对比以下先以官方文档的表格来抛砖引玉,记录一下这段时间对于clickhouse的学习成果。 行式数据库
列式数据库
从表格上看,一下子比较难以理解,行式数据库和我们电子表格看到的表现一样,但是存储是一行一行的存储,列式数据库是以一列一列的存储。以下是以文件存储结构来做一个示例: 也就是说,对于行数据库,一行数据是形成一个完整的文件(实际底层具体存储不是这样子,这里是方便说明整个思想),这个文件包含了这一整行的每个数据字段,取到这一行就能拿到完整的数据。 而对于列式存储来说,一列数据为一个文件,如以上所展示的, 然后我做了个脑图再次对这个结构做个对比。 以下用json来描述两种数据结构的区别:
列式数据库主要应用场景列式数据库主要运用场景为 以下我列出一些
MergeTree(合并树) 数据表引擎主要特点
主要特点:
结构说明这段时间为了研究
ClickHouse 数据库目前梳理的一些注意点
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 17 Mar 2022 08:15 PM PDT 作者 / Dave Burke, VP of Engineering 上个月,我们 发布了 Android 13 的首个开发者预览版。Android 13 围绕我们的核心主题打造,即隐私和安全、开发者生产力,以及支持平板电脑和 大屏幕设备。今天,我们为大家带来了 Android 13 开发者预览版 2,提供了更多的新功能和变更,供您在应用中尝试。您的意见会帮助我们将 Android 打造成更适合开发者和用户的平台,欢迎大家和我们分享测试反馈! 在今天的发布之前,Android 12L 功能更新已经于上周发布至 Android 开源项目 (AOSP) 中,这些功能更新会帮助大家充分利用超过 2.5 亿台的大屏幕 Android 设备。为了帮助大家深入了解 Android 13、平板电脑,以及我们在 Jetpack Compose 中提供的开发者生产力功能,我们准备了新一期的 #TheAndroidShow 节目,欢迎大家 点击这里 观看。 Android 12L 功能更新,现已加入 AOSP在开始介绍本次的开发者预览版之前,让我们先回顾一下上周的新闻: 我们已经正式将 Android 12L 功能更新发布至 AOSP,并会在未来几周内推送至所有支持的 Pixel 设备。Android 12L 优化了 Android 12 在平板电脑上的体验,其中包括一些更新,比如用户可以在新的任务栏中通过拖放让应用进入分屏模式,通知栏和锁屏中新的大屏幕布局,以及改进的应用兼容模式。您可以阅读 发布博文 了解更多信息。 从今年晚些时候开始,Android 12L 将在三星、联想和微软的平板电脑和可折叠设备上按计划更新,现在是时候让您的应用做好准备了。我们强烈建议大家在分屏模式下用不同大小的窗口测试应用,以及针对不同的屏幕方向进行测试,并检查新的兼容模式的变化 (如果适用的话)。请访问 官方文档 了解更多关于 Android 12L 的开发信息。 最重要的是: Android 12L 的大屏幕功能也是 Android 13 的基础之一,所以您可以在 Android 13 上进行开发和测试,因为 Android 13 覆盖了运行 Android 12L 的平板电脑受众。我们将大屏幕视为 Android 未来的关键方向之一,我们将继续投入资源,为您提供更多相关工具,帮助您为平板电脑、Chromebook 和可折叠设备构建良好体验。您可以通过官方文档了解更多关于如何 开始为大屏幕进行优化 的信息,并查阅我们的 大屏幕开发者资源。 下面让我们深入了解今天的 Android 13 开发者预览版 2 中的新内容。 隐私和用户信任人们希望使用值得信赖的操作系统和应用,来处理他们最私密、最敏感的信息以及设备上的资源。隐私和用户信任是 Android 产品原则的核心。在 Android 13 中,我们将继续专注于在设备上提供更安全的环境,以及为用户提供更多的控制权,从而为所有人打造一个负责任、高质量的平台。以下是开发者预览版 2 中的新增内容。 通知权限 - 为了帮助用户专注于对他们最重要的通知,Android 13 为从应用发送通知引入了一个新的 运行时权限: POST_NOTIFICATIONS。以 Android 13 为目标平台的应用现在需要在发送通知前向用户申请通知权限。以 Android 12 或更低版本为目标平台的应用,系统将代您处理升级流程。我们也会持续优化这个流程。为了给您的用户提供更多的背景信息和控制权限,我们鼓励您尽早将目标平台设为 Android 13,并在您的应用中申请通知权限。请访问 官方文档 了解详细信息。 △ Android 13 中的通知权限对话框 开发者可降级权限 - 一些应用可能不再需要某些之前由用户授予过的权限,这些权限曾用于开启某项特定功能或保留旧的 Android 版本中的敏感权限。在 Android 13 中,我们提供了 新的 API),让您的应用通过降级以前被授予的运行时权限来保护用户隐私。 更安全地导出上下文注册的接收器 - 在 Android 12 中,我们要求开发者针对应用清单中声明的 Intent 接收器来声明其可导出性。在 Android 13 中,我们要求您也为上下文注册的接收器做同样的事情: 在为非系统来源注册接收器时,为其添加 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED 标志。这将有助于确保接收者不会被其他应用发送广播,除非其有意为之。虽然在 Android 13 中对此没有强制要求,但我们建议您声明可导出性,迈出保护您的应用的第一步。 开发者生产力在 Android 13 中,我们正在努力为您提供更多的工具,帮助您为用户提供更精致的体验和更好的性能。以下是今天的开发者预览版中的一些更新。 日语文本折行改进 - TextView 现在可以按词句 (文節/Bunsetsu,听起来觉得自然的最小语义单位) 或短语来折行文本,而不是按字符折行。这会让日语应用有更佳的阅读体验。您可以通过在 TextView 中使用 android:lineBreakWordStyle="phrase" 来启用这种折行: △ 不启用 (上) 和启用 (下) 短语折行的日语文本对比 改进了非拉丁文字的行高 - Android 13 使用适合每种语言的行高,改进了非拉丁文字 (如泰米尔语、缅甸语、泰卢固语和藏语) 的显示效果。新的行高可以防止出现剪切,并改善字符的定位。您的应用只需将目标平台设为 Android 13,即可获得这些改进。请大家务必在使用新的行距时测试您的应用,因为变化可能会影响非拉丁语系的用户界面。 △ 以 Android 13 为目标平台的应用中的非拉丁文字行高改进效果 (下) 文本转换 API - 日语和汉语等语言的用户会使用拼音输入法,这往往会拖慢搜索和自动补全等功能。在 Android 13 中,应用可以调用新的 文本转换 API,让用户可以更快更容易地找到需要的内容。例如,以前的搜索需要日语用户 (1) 输入平假名来表示搜索词的发音,可能是一个地名或一个应用名 (2) 使用键盘将平假名字符转换为汉字 (3) 使用汉字字符重新搜索 (4) 获得搜索结果。在新的文本转换 API 的帮助下,日语用户只需输入平假名,就可以立即看到日文汉字的搜索结果,相当于跳过了第 2 和第 3 步。 彩色矢量字体 - Android 13 增加了对 COLR 版本 1 (请参考详细 规格 和 介绍视频) 字体的渲染支持,并将系统表情符号更新为 COLRv1 格式。COLRv1 是一种新的、高度紧凑的字体格式,在任何尺寸下都能快速清晰地渲染。对于大多数应用,这项修改完全无法被感知到,系统会自动处理好一切。从开发者预览版 2 开始,您可以选择在应用中使用 COLRv1。如果您的应用是自己实现文本渲染,并使用系统字体,我们建议您使用 COLRv1 并测试表情符号的渲染效果。您可以在 Chrome 发布公告 中了解更多关于 COLRv1 的信息。 △ COLRv1 矢量表情符号 (左) 和位图表情符号 蓝牙低功耗 (LE) 音频 - 低功耗 (Low Energy, LE) 音频是下一代的无线音频,用于取代经典蓝牙,并实现新的用例和连接拓扑结构。用户可以通过它与朋友和家人分享和广播自己的音频,或订阅公共广播以获得信息、娱乐或无障碍辅助信息。它旨在确保用户能够在不牺牲电池寿命的情况下接收高保真音频,并在不同用例之间无缝切换,这是经典蓝牙无法做到的。Android 13 增加了对低功耗音频的内置支持,因此开发者们无需做任何操作即可在兼容的设备上获得这个新功能。 MIDI 2.0 - Android 13 增加了对新的 MIDI 2.0 标准的支持,包括通过 USB 连接 MIDI 2.0 硬件的能力。这个更新的标准提供了一些新功能,如更高的控制器分辨率,更好地支持非西方音调,以及通过单一音符控制器提供更佳的表现力。 应用兼容性在发布新的平台版本时,我们优先考虑应用的兼容性,让系统更新的体验更快、更顺畅。在 Android 13 中,面向应用的变更都是可选的,以便您有更多的时间进行调整和适配,我们还更新了工具和流程,帮助您更快地做好准备。 随着开发者预览版 2 的到来,我们得以在 Android 13 的发布历程中更进一步,并继续改善整体的稳定性,现在是时候尝试新功能和变更,并向我们提交反馈了。我们特别希望得到关于 API 的反馈意见,以及 平台变更 对您的应用造成影响的详细信息。欢迎大家前往 反馈页面,与我们分享您的想法或报告问题。 现在您也可以开始进行 兼容性测试,并确定接下来需要完成的工作。我们建议大家尽早安排这些工作,以便在 Android 13 Beta 1 推出时发布与之兼容的更新。目前暂时不需要更改应用的 targetSdkVersion,但我们建议使用开发者选项中的 行为变更开关 来初步了解 Android 13 中的可选变更对应用造成的影响。 我们将在 2022 年 6 月抵达 平台稳定性里程碑,届时所有面向应用的系统行为、SDK/NDK API 和非 SDK 清单都将最终确定。到那时,您可以完成最终兼容性测试,并发布完全兼容的应用、SDK 或开发库。详见 发布时间表 。 △ 开发者选项中的应用兼容性开关 即刻开始体验 Android 13不论您是想体验 Android 13 的功能、测试应用还是 提交反馈,都可以从这次的开发者预览版开始。只需将系统映像 下载并刷入 Pixel 6 Pro / 6 / 5a 5G / 5 / 4a (5G) / 4a / 4 XL / 4 设备,即可立即开始使用。如果您没有 Pixel 设备,则可以在 Android Studio Dolphin 中使用带有 64 位系统映像的 Android 模拟器。如果想进行更广泛的测试,我们也提供了 GSI 映像。如果您已经在 Pixel 设备上安装了上一个预览版,则会通过 OTA 方式自动获得更新,包括之后的预览版和 Beta 版。请访问 官方文档 了解详细信息。 了解本次发布的完整信息,请访问 Android 13 开发者网站。 欢迎您 点击这里 向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posted: 16 Mar 2022 10:17 PM PDT 大家好,我卡颂。
v18中,组件render的次数可能更少 欢迎加入人类高质量前端框架群,带飞 状态从何而来在如下组件中:
也就是说,组件必须 考虑如下触发更新的代码:
在
即, 所以,状态的计算需要先收集 对于上述例子,将更新分别命名为u0~u2,则状态的计算公式为:
Concurrent带来的变化
表现在计算状态中的区别就是,如果某个更新优先级低,则会被跳过。 假设上述例子中
即:
显然这个结果是不对的。 所以,并发情况下 当计算状态时,如果某次 比如上例中, 在例子中即为 下次更新的情况如下:
可见,最终的结果303与同步的React是一致的,只是需要 同步的React 并发的React 新旧Concurrent的区别从上例我们发现,组件 在老版并发的React中,表示优先级的是一个被称为
在这种逻辑下,只要优先级低,就会被跳过,就意味着多一次 在新版并发的React中,优先级被保存在31位的二进制数中。 举个例子:
其中 比较优先级的函数为:
其中:
但是被跳过的更新(例子中的
显然任何
所以这个更新一定会在下次处理。换言之,在新版并发的React中,由于优先级原因被跳过,导致的重复render,最多只会有2次。 总结相比于老版并发的React,新版并发的React在 反映到用户的感官上,用户会更少看到未计算完全的中间状态。 |
You are subscribed to email updates from SegmentFault 最新的文章. To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google, 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States |
No comments:
Post a Comment