1背景作为一个常年在一线带组的Owner以及老面试官,我们面试的目标基本都是一线的开发人员。从服务端这个技术栈出发,问题的范围主要还是围绕开发语言(Java、Go)等核心知识点、数据库技术、缓存技术、消息中间件、微服务框架的使用等几个方面来提问。MySQL作为大厂的主流数据存储配置,当然是被问的最多的,而其中重点区域就是索引的使用和优化。2索引的优化步骤2.1高效索引的原则1.正确理解和计算索引字段的区分度,下面是计...
2022-09-20 11:26:17 4878浏览 0点赞 0回复 0收藏
1回顾上一节我们详细讲解了如何对数据库进行分区操作,包括了垂直拆分(ScaleUp纵向扩展)和水平拆分(ScaleOut横向扩展),同时简要整理了水平分区的几种策略,现在来回顾一下。2水平分区的5种策略2.1Hash(哈希)这种策略是通过对表的一个或多个列的HashKey进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如我们可以建立一个对表的日期的年份进行分区的策略,这样每个年份都会被聚集在一个区间。PARTITIONBY...
2022-09-20 11:25:51 4855浏览 0点赞 0回复 0收藏
1为什么要分库分表物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈。为了解决这个问题,行业先驱们充分发扬了分而治之的思想,对大库表进行分割,然后实施更好的控制和管理,同时使用多台机器的CPU、内存、存储,提供更好的性能。而分治有两种实现方式:垂直拆分和水平拆分。2垂直拆分(ScaleUp纵向扩展)垂直拆分分为垂直分库和垂直分表,主要按功能模块...
2022-09-19 16:55:56 4871浏览 0点赞 0回复 0收藏
数据库对象命名规范数据库对象数据库对象是数据库的组成部分,常见的有以下几种:表(Table)、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(StoredProcedure)、用户(User)等。命名规范是指数据库对象如数据库(SCHEMA)、表(TABLE)、索引(INDEX)、约束(CONSTRAINTS)等的命名约定。数据库对象全局命名规范1、命名使用具有意义的英文词汇,词汇中间...
2022-09-19 16:54:40 4023浏览 0点赞 0回复 0收藏
1背景分布式系统绕不开的核心之一的就是数据缓存,有了缓存的支撑,系统的整体吞吐量会有很大的提升。通过使用缓存,我们把频繁查询的数据由磁盘调度到缓存中,保证数据的高效率读写。当然,除了在内存内运行还远远不够,我们今天就以具有代表性的缓存中间件Redis为例子,分析下,它是如何达到飞起的效率。2Redis高效性能分析Redis之所以能够提供超高的执行效率,主要从以下几个维度来实现的:•存储模式:基于内存实现,而非磁...
2022-09-19 16:52:53 4260浏览 0点赞 0回复 0收藏
★微服务系列微服务1:微服务及其演进史微服务2:微服务全景架构微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)1微服务带来的挑战在第2篇《微服务2:微服务全景架构》中,我们曾经分析过微服务化后所面临的挑战,有过如下的结论:1.1分布式固有复杂性微服务架构是基于分布式的系统,而构建分布式系统必然会带来额...
2022-09-19 16:52:12 4853浏览 0点赞 0回复 0收藏
1背景经常会遇到这种情况,我们的业务已经稳定地运行一段时间了,并且流量渐渐已经上去了。这时候,却因为某些原因(比如功能调整或者业务扩展),你需要对数据表进行调整,加字段or修改表结构。可能很多人说altertableaddcolumn...altertablemodify...,轻轻松松就解决了。这样其实是有风险的,对于复杂度比较高、数据量比较大的表。调整表结构、创建或删除索引、触发器,都可能引起锁表,而锁表的时长依你的数据表实际情况而...
2022-09-19 16:51:50 4635浏览 0点赞 0回复 0收藏
Hello大家好,我是阿粉,最近在写文章提交到GitHub的时候突发发现提交不上去,仔细一看原来是GitHub不支持密码验证了,熟悉GitHub的朋友都知道GitHub的仓库除了可以用SSH方式拉取之外还可以使用HTTPS的方式拉取,并且通过账号和密码进行提交。阿粉之前的项目就是使用HTTPS的方式来拉取,现在不让使用密码来进行提交了,突然就用不了了。提示的内容如下,我们可以看到提示我们密码验证在20210813这天就不在支持了(对!没错,阿...
2022-09-19 16:51:30 5037浏览 0点赞 0回复 0收藏
1介绍从上一篇的《深刻理解高性能Redis的本质》中可以知道,我们经常在数据库层上加一层缓存(如Redis),来保证数据的访问效率。这样性能确实也有了大幅度的提升,但是本身Redis也是一层服务,也存在宕机、故障的可能性。一旦服务挂起,可能生产的后果包括如下几方面:1、Redis的数据是存在内存中的,所以一旦挂起,内存中的数据会全部丢失。2、IO从内存层级迁移到磁盘层级,性能极速下降。3、原本访问缓存的请求会透过缓存层...
2022-09-19 16:48:18 5345浏览 0点赞 0回复 0收藏
1关于消息中间件1.1什么是消息中间件?消息中间件是指在分布式系统中完成消息的发送和接收的基础软件。消息中间件也可以称消息队列(MessageQueueMQ),用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。简而言之,互联网场景中经常使用消息中间件进行消息路由、订阅发布、异步处理等操作,来缓解系统的压力。1.2...
2022-09-19 16:47:59 5331浏览 0点赞 0回复 0收藏
阿粉最近在刷知乎的时候发现了一个很有意思的问题,那就是:为什么程序员会有代码能跑就不要动的观点?说实话这句话在阿粉的工作中经常会听到,不仅仅是对于一些长期没人维护的代码,对于日常维护的系统哪怕是之前实现的代码,大家更是敬而远之,能不动一行代码绝不加个空格,更有甚者哪怕是复制一下之前的代码改改,也不考虑复用之前的代码,毕竟复制粘贴大法实在好用。那么为什么程序员会有这种想法呢?不得不说知乎的答主都...
2022-09-19 16:47:45 4240浏览 0点赞 0回复 0收藏
阿粉相信大家肯定都知道,在数据库中加一定量的索引,会让你的查询语句,从原来的3秒缩短到零点几秒的程度,但是很多人都不知道为什么要加索引,为什么加了索引之后,你的查询语句就会起飞呢?今天阿粉来聊一下索引。索引的类型(常见的)●主键索引(primarykey)主键索引这个阿粉从刚开始接触开发的时候,就被各种灌输,表的主键就默认是索引,不允许出现空值。●普通索引(indexnormal)MySQL中基本索引类型,没有什么限制,允许在...
2022-09-19 16:47:05 4334浏览 0点赞 0回复 0收藏
前段时间阿粉在公司开发的时候,不慎导致了数据库产生了锁表的操作,因为阿粉之前从来没有遇到过,之前只是了解过一点,所以导致了锁表,于是阿粉为了解决问题,研究了一下这一部分的内容,于是决定把这一块的知识分享给大家。数据库锁定机制话说如果你只是单纯的说"锁表",总是让人感觉有点Low,而我们就直接换个比较高大上一点的名词,锁定机制!为了保证数据的完整,也就是他的一致性和有效性,所以才会让数据库出现了锁定机...
2022-09-19 16:46:41 4493浏览 0点赞 0回复 0收藏
虽然我们习惯于给主键ID指定AUTOINCREMENT属性,但是AUTOINCREMENT也是可以指定到非主键字段的,唯一的约束就是这个字段上面得加索引,有了索引,就可以通过类似SELECTMAX(aicol)的语句快速读到这列数据的最大值。本文要探讨的话题是MySql的InnoDB引擎处理自增数据列的原理MySql5.1之前的实现在这个版本之前,用AUTOINCREMENT修饰的数据列确实是严格连续自增的。MySql的实现是会针对每个插入语句加一个全表维度的锁,这个锁可以...
2022-09-19 16:46:25 4619浏览 0点赞 0回复 0收藏
阿粉最近看到一张图,如上所示,原本只是一个搞笑的图,但是在阿粉看来这分明是个渣男啊!一句普通的SQL语句SELECTFROMGIRLSWHEREAGEBETWEEN20AND24ANDBOYFRIENDISNULL,也有很多内涵!什么?没看出来?来,阿粉带你品品。未限制返回的数量这是个大问题啊,竟然没有设置LIMIT1,你是想找几个女朋友?设置LIMIT1后MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查找下一条符合记录的数据。一般大家在写列表查询的时...
2022-09-19 16:46:05 5513浏览 0点赞 0回复 0收藏
一、提问环节在刚进入IT行业的第一年换工作的时候,至今让我印象最深刻的有一个这样的面试题:如何通过SQL方式将数据库的行转列?当时的面试官让我现场写SQL,信心满满的我,我觉得我可以做出来,然后10分支、20分钟、30分钟...过去了,很遗憾一点动静都没有。最后的我不得不服,结局相信大家也能猜到是啥了!💔二、场景分析面试结束之后,不服输的我决定要把这个问题给破解掉,回到自己的租处之后,打开电脑,决定从0开始琢磨...
2022-09-19 16:45:41 5083浏览 0点赞 0回复 0收藏
Hello大家好,我是阿粉,不知道你有没有遇到过这种场景,线上服务跑了一段时间过后偶尔会出现问题,光靠代码和数据分析找不到原因,而且这种情况也不是很常见所以对应的代码也没有加日志输出,如果说重新加上日志进行发布的话,就会破坏现场只能再等一段时间了,或者有的时候想看下接口的参数,从而判断接口参数有没有问题。这个时候就在想有没有一个好的方法,可以不用重新修改源代码也不用发布升级就可以增加一些日志看到运行...
2022-09-19 16:31:46 4532浏览 0点赞 0回复 0收藏
CMSCMS垃圾回收器,全称ConcurrentMarkSweep并发标记清除,从名字上面我们也可以看出这个垃圾回收器是基于标记清除算法实现的。首先"并发"表示GC线程可以和用户线程并发执行,同时既然是标记清除算法,说明这个垃圾回收器会产生很多碎片,这是标记清除算法的缺点。同时CMS是作用于老年代的,老年代的垃圾回收频率相对年轻代会低一点。CMS的垃圾回收有四个过程1.初始标记:2.并发标记:3.重新标记:4.并发清除:初始标记的时候是...
2022-09-19 16:31:19 4731浏览 0点赞 0回复 0收藏
阿粉相信大家肯定所有的开发者都对Java8里面的所有的东西都感兴趣,虽然目前的JDK已经更新到JDK17了,但是阿粉相信,现在很多公司使用的还都是JDK8甚至是JDK7,但是,就算是有些公司已经升级到JDK8但是对于JDK8里面的一些东西的使用,却没有使用的淋漓尽致。阿粉今天就给大家放出几个JDK8里面比较好用的。JDK8大家都是知道JDK8就开始使用Lambda表达式,但是很多不管是在教程上还是在其他的书籍上,都没有说在实际开发的时候去使...
2022-09-19 16:31:08 4125浏览 0点赞 0回复 0收藏
一、介绍在1994年,由ErichGamma、RichardHelm、RalphJohnson和JohnVlissides四人合著出版了一本名为DesignPatternsElementsofReusableObjectOrientedSoftware(中文译名:设计模式可复用的面向对象软件元素)的书,该书首次提到了软件开发中设计模式的概念,四位作者合称GOF(全拼GangofFour),简称四人帮!书中共说到23种设计模式,这些模式可以分为三大类:创建型模式(CreationalPatterns)、结构型模式(StructuralPatter...
2022-09-19 16:29:43 3990浏览 0点赞 0回复 0收藏