技术文
文章平均质量分 94
程序员麦冬
这个作者很懒,什么都没留下…
展开
-
华为资深架构师花数月整理:2021年最新版Java架构面试合集【Java基础+多线程+Mysql+Redis+JVM】
前言:现在已经十二月除,金九银十也已经过去了,很明显今年的面试季明显不如往年火热,对于求职者来说,也更难了一些。,综合来看今年确实不是面试的最佳时期,不过趁今年所剩的时间来好好准备,明年的金三银四或许会顺利得多。不过,对于今年的应届生来说,等到明年再去面试,竞争就更大了。不过,好在我们总能够找到一些好资源进行分享,今天分享的这份资料是2021年最新版Java架构面试合集,完整地看完之后,或许你就会觉得,应届生求职其实也没有那么难了。【注意,注意,文末获取答案】java基础八种基本数据原创 2020-12-08 19:50:27 · 628 阅读 · 1 评论 -
当面试官问你Spring Boot 中的监视器是什么?直接就这样回答稳拿offer
多年来,随着新功能的增加,spring 变得越来越复杂。只需访问https://spring.io/projects 页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。Spring Boot 是解决这个问题的方法。Spring Boot 已.原创 2020-12-01 21:59:25 · 758 阅读 · 0 评论 -
UDP ,你要耗子喂汁呀!
运输层位于应用层和网络层之间,是 OSI 分层体系中的第四层,同时也是网络体系结构的重要部分。运输层主要负责网络上的端到端通信。运输层为运行在不同主机上的应用程序之间的通信起着至关重要的作用。下面我们就来一起探讨一下关于运输层的协议部分运输层概述计算机网络的运输层非常类似于高速公路,高速公路负责把人或者物品从一端运送到另一端,而计算机网络的运输层则负责把报文从一端运输到另一端,这个端指的就是 端系统。在计算机网络中,任意一个可以交换信息的介质都可以称为端系统,比如手机、网络媒体、电脑、运营商等。在原创 2020-11-29 19:12:30 · 285 阅读 · 0 评论 -
硬核!15张图解Redis为什么这么快
作为一名服务端工程师,工作中你肯定和 Redis 打过交道。Redis 为什么快,这点想必你也知道,至少为了面试也做过准备。很多人知道 Redis 快仅仅因为它是基于内存实现的,对于其它原因倒是模棱两可。那么今天就和小莱一起看看:图注:- 思维导图 -基于内存实现这点在一开始就提到过了,这里再简单说说。Redis 是基于内存的数据库,那不可避免的就要与磁盘数据库做对比。对于磁盘数据库来说,是需要将数据读取到内存里的,这个过程会受到磁盘 I/O 的限制。而对于内存数据库来说,本身数据就存在于内存原创 2020-11-29 14:05:31 · 245 阅读 · 0 评论 -
宕机了,Redis数据丢了怎么办?
前言Redis作为内存型的数据库,虽然很快,依然有着很大的隐患,一旦「服务器宕机」重启,内存中数据还会存在吗?很容易想到的一个方案是从后台数据恢复这些数据,如果数据量很小,这倒是一个可行的方案。但是如果数据量过大,频繁的从后台数据库访问数据,压力很大;另外一方面恢复数据的时间极慢。对于Redis来说,实现数据的持久化和快速恢复是至关重要。什么是 AOF 日志?AOF(Append Only File)日志称之为「写后日志」,即是命令先执行完成,把数据写入内存,然后才会记录日志。AOF日志(文本形原创 2020-11-27 19:13:49 · 545 阅读 · 0 评论 -
年轻人不讲武德,竟然重构出这么优雅后台 API 接口
最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐的重复代码,使其开发更加优雅。展示具体重构代码之前,我们先来看下原先对外 API 接口是如何开发的。这个 API 接口主要是用来与我们 APP 交互,这个过程我们统一定义一个交互协议,APP 端与后台 API 接口统一都使用 JSON 格式。另外后台 API 接口对 APP 返回时,统一一些错误码,APP 端需要根据相应错误码,在页面弹出一些原创 2020-11-27 13:36:08 · 1022 阅读 · 0 评论 -
不懂分布式事务,别说你懂微服务!
1. 传统应用的事务管理1.1 本地事务再介绍微服务下的数据一致性之前,先简单地介绍一下事务的背景。传统单机应用使用一个RDBMS作为数据源。应用开启事务,进行CRUD,提交或回滚事务,统统发生在本地事务中,由资源管理器(RM)直接提供事务支持。数据的一致性在一个本地事务中得到保证。1.2 分布式事务1.2.1 两阶段提交(2PC)当应用逐渐扩展,出现一个应用使用多个数据源的情况,这个时候本地事务已经无法满足数据一致性的要求。由于多个数据源的同时访问,事务需要跨多个数据源管理,分布式事务应运而生原创 2020-11-26 19:32:51 · 230 阅读 · 0 评论 -
单线程的Redis慢动作你知道多少
前言现在一提到Redis的第一反应就是快、单线程,但是Redis真的快吗?真的是单线程吗?你有没有深入了解一下Redis,看看它的底层有哪些"慢动作"呢?为什么 Redis 这么火?Redis作为一个内存数据库,它接收一个key到读取数据几乎是微妙级别,一个字快诠释了它火的原因。另一方面就归功于它的数据结构了,你知道Redis有哪些数据结构吗?很多人可能会说不就是String(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Sorted Set(有序集合)这五种吗?我想大家可能有一原创 2020-11-25 20:57:10 · 614 阅读 · 0 评论 -
这次一定让你记住 TCP 三次握手、四手挥手!
TCP协议全称为:Transmission Control Protocol,是一种面向链接、保证数据传输安全、可靠的数据传输协议。为了确保数据的可靠传输,不仅需要对发出的每个字节进行编号确认,还需要验证每一个数据包的有效性。每个TCP数据包是封闭在IP包中的,每个一IP包的后面紧跟着的是TCP头,TCP报文格式如下:源端口和目的端口字段TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。TCP目的端口(Destination Port):目标计算机的应用程序端口号原创 2020-11-24 19:10:34 · 316 阅读 · 0 评论 -
架构设计:微服务模式下,实现灰度发布模式
一、基本逻辑请求通过8001服务,在灰度规则中,会读取下次请求的服务列表,根据版本号参数规则,选中路由的服务。配置版本号,区分灰度版本和默认正常版本;自定义拦截器,管理版本号或其他标识参数在请求中传递;自定义服务选中策略,基于版本标识路由服务;如果灰度服务不存在,则基于规则选中默认服务;二、版本配置在node12-server集群配置两个服务:在8002端口配置版本v7.0.0,在8003端口配置版本v7.0.1,用来测试灰度版本选择。8002服务eureka: metadata原创 2020-11-24 13:36:40 · 336 阅读 · 0 评论 -
new一个对象到底占了多少内存
一.对象的创建当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。1.空间分配指针碰撞假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一 边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那 个指针向空闲空间方向挪动一段与对象大小相等的距离(Serial、ParNew使用)空间列表但如果Jav原创 2020-11-23 19:13:46 · 2091 阅读 · 0 评论 -
Javaer 进阶必看的 RocketMQ ,就这篇了
RocketMQ 整体架构设计整体的架构设计主要分为四大部分,分别是:Producer、Consumer、Broker、NameServer。为了更贴合实际,我画的都是集群部署,像 Broker 我还画了主从。Producer:就是消息生产者,可以集群部署。它会先和 NameServer 集群中的随机一台建立长连接,得知当前要发送的 Topic存在哪台 Broker Master上,然后再与其建立长连接,支持多种负载平衡模式发送消息。Consumer:消息消费者,也可以集群部署。它也会先和 Na原创 2020-11-22 19:25:32 · 318 阅读 · 0 评论 -
MySQL 连接为什么挂死了?
一、背景近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令人感到头疼,一来这类问题有时候属于“偶发”现象,难以在环境上快速复现;二来则是可靠性问题的定位链条有时候变得很长,极端情况下可能要从 A 服务追踪到 Z 服务,或者是从应用代码追溯到硬件层面。本次分享的是一次关于 MySQL 高可用问题的定位过程,其中曲折颇多但问题本身却比较有些代表性,遂将其记录以供参考。架构首先,本系统以 MySQL 作为主要的数据存储部件。整一个是典型的微服务架构(SpringBoot + SpringClo原创 2020-11-22 15:54:07 · 826 阅读 · 1 评论 -
【干货】连肝7个晚上,总结了关于Java基础的16个问题!
说说进程和线程的区别?进程是程序的一次执行,是系统进行资源分配和调度的独立单位,他的作用是是程序能够并发执行提高资源利用率和吞吐率。由于进程是资源分配和调度的基本单位,因为进程的创建、销毁、切换产生大量的时间和空间的开销,进程的数量不能太多,而线程是比进程更小的能独立运行的基本单位,他是进程的一个实体,可以减少程序并发执行时的时间和空间开销,使得操作系统具有更好的并发性。线程基本不拥有系统资源,只有一些运行时必不可少的资源,比如程序计数器、寄存器和栈,进程则占有堆、栈。知道synchronized原原创 2020-11-20 16:44:39 · 266 阅读 · 0 评论 -
Java泛型中的通配符 T,E,K,V,? 你了解吗?
前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一原创 2020-11-20 13:52:38 · 352 阅读 · 0 评论 -
一文了解RPC框架原理
1.RPC框架的概念RPC(Remote Procedure Call)–远程过程调用,通过网络通信调用不同的服务,共同支撑一个软件系统,微服务实现的基石技术。使用RPC可以解耦系统,方便维护,同时增加系统处理请求的能力。上面是一个简单的软件系统结构,我们拆分出来用户系统和订单系统做为服务存在,让不同的站点去调用。只需要引入各个服务的接口包,在代码中调用RPC服务就跟调用本地方法一样,我刚接触到这种调用方式的时候颇为惊奇,我明明调用的就是java语言方法啊(以java为例,现在RPC框架一般都支持多原创 2020-11-19 19:17:08 · 610 阅读 · 0 评论 -
一篇文章带你学会注册Nacos 配置中心和服务
Nacos配置中心在项目中使用Nacos做配置中心还是比较简单的,我们先创建SpringBoot项目,然后引入nacos-config的jar包,具体如下:<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>原创 2020-11-19 13:51:47 · 577 阅读 · 1 评论 -
深入理解 relocating 对Elasticsearch集群的影响
rebalance 用于将集群中的分片进行均衡,保持各个节点的分片数量大致相等,当集群扩容或缩容,掉一个节点的时候,这过程会自动完成。直观的感觉他应该是在后台默默干活的过程,最多占用带宽和磁盘 io 资源,应该感受不到他的存在,但实际情况是,他可能引起一些意想不到的问题。这篇文章主要思考分片 relocating 对集群会有哪些影响(基于 v7.7),有下面几个。shard-started RPC 会抢占较多的 master 处理时间分片移动结束后,target 节点会向 master 发起一个 sh原创 2020-11-18 22:10:45 · 3542 阅读 · 1 评论 -
Spring bean 加载顺序导致的 bug 问题
一、问题描述今天启动 spring boot 项目的时候,有时候会报加载不到配置文件的属性。配置文件的属性是用 @Value 获取的,属性有时候会是 null 。程序经过简化,是这样的,有一个 InitConfig 类,用来让静态工具类能获取到配置文件的属性值。内容是这样的:在静态工具类中,通过 InitConfig.load(); 来获取配置文件中的属性值,这是没问题的,因为 @Configuration 类会在 spring 程序启动过程中就执行了。但如果在 @Service 修饰的类中,调用原创 2020-11-18 14:10:13 · 1067 阅读 · 0 评论 -
springboot + rabbitmq 用了消息确认机制,感觉掉坑里了
一、准备环境1、引入 rabbitmq 依赖包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>2、修改 application.properties 配置配置中需要开启 发送端和 消费端 的消息确认。spring.rab原创 2020-11-17 22:07:38 · 373 阅读 · 0 评论 -
Java中List的五种去重方法及效率对比,你都用对了吗?
01、使用两个for循环实现List去重(有序)/**使用两个for循环实现List去重(有序) * * @param list * */public static List removeDuplicationBy2For(List<Integer> list) { for (int i=0;i<list.size();i++) { for (int j=i+1;j<list.size();j++) {原创 2020-11-17 17:02:03 · 717 阅读 · 2 评论 -
Kubernetes 中如何保证优雅地停止 Pod
一直以来我对优雅地停止 Pod 这件事理解得很单纯: 不就利用是 PreStop hook 做优雅退出吗? 但这周听了组里大哥的教诲之后,发现很多场景下 PreStop hook 并不能很好地完成需求,这篇文章就简单分析一下”优雅地停止 Pod”这回事儿.何谓优雅停止?优雅停止(Graceful shutdown)这个说法来自于操作系统,我们执行关机之后都得 OS 先完成一些清理操作,而与之相对的就是硬中止(Hard shutdown),比如拔电源。到了分布式系统中,优雅停止就不仅仅是单机上进程自己的原创 2020-11-14 20:38:59 · 943 阅读 · 0 评论 -
CTO:不要在代码中写 set/get 方法了,逮一次罚款...
CTO:what?你的 Java 代码中还充斥着大量的 set/get 方法于是公司出了规定:不要在代码中写 set/get 方法了,逮一次罚款。刚开始学习 Java 语言的时候,面向对象的三大特征就是封装,继承,和多态。在 Java 中,要保证封装性,需要将成员变量私有化,对外提供 set/get 方法来访问,虽然现在的 IDE,像 eclipse,IDEA都提供了快捷键,来生成 set/get 方法,但是在做项目的时候,一个 JavaBean 往往会有很多的成员变量,一个变量对应两个方法,如果有10原创 2020-11-14 15:20:32 · 272 阅读 · 0 评论 -
这篇 MySQL 索引和 B+Tree 讲的太通俗易懂!
正确的创建合适的索引,是提升数据库查询性能的基础。在正式讲解之前,对后面举例中使用的表结构先简单看一下:create table user( id bigint not null comment 'id' primary key, name varchar(200) null comment 'name', age bigint null comment 'age', gender int null comment 'ge原创 2020-11-13 22:45:05 · 288 阅读 · 0 评论 -
你知道Redis可以实现延迟队列吗?
Redis在队列中如何实现延时的情况:在我们日常生活中,我们可以发现:在淘宝、京东等购物平台上下单,超过一定时间未付款,订单会自动取消。打车的时候,在规定时间没有车主接单,平台会取消你的单并提醒你暂时没有车主接单。点外卖的时候,如果商家在10分钟还没接单,就会自动取消订单。收快递的时候,如果我们没有点确认收货,在一段时间后程序会自动完成订单。在平台完成订单后,如果我们没有在规定时间评论商品,会自动默认买家不评论。…这时,我们可以想想为什么要这样做?因为这样可以保证商品的库存可以释放给其原创 2020-11-13 15:04:20 · 663 阅读 · 0 评论 -
真正理解Mysql的四种隔离级别
什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。事务的 ACID事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特原创 2020-11-12 17:19:38 · 403 阅读 · 0 评论 -
MySQL中悲观锁和乐观锁到底是什么?
索引和锁是数据库中的两个核心知识点,隔离级别的实现都是通过锁来完成的按照锁颗粒对锁进行划分 ?锁用来对数据进行锁定,我们可以从锁定对象的粒度大小来对锁进行划分,分别为行锁、页锁和表锁。行锁就是按照行的粒度对数据进行锁定。锁定力度小,发生锁冲突概率低,可以实现的并发度高,但是对于锁的开销比较大,加锁会比较慢,容易出现死锁情况。页锁就是在页的粒度上进行锁定,锁定的数据资源比行锁要多,因为一个页中可以有多个行记录。当我们使用页锁的时候,会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行。页锁的原创 2020-11-12 13:51:18 · 264 阅读 · 0 评论 -
SQL 优化极简法则,还有谁不会?
SQL 作为关系型数据库的标准语言,是 IT 从业人员必不可少的技能之一。SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。查询优化是一个复杂的工程,涉及从硬件到参数配置、不同数据库的解析器、优化器实现、SQL 语句的执行顺序、索引以及统计信息的采集等,甚至应用程序和系统的整体架构。本文介绍几个关键法则,可以帮助我们编写高效的 SQL 查询;尤其是对于初学者而言,这些法则至少可以避免我们写出性能很差的查询语句。以下法则适用于各种关系型数据库,包括但不限于:M原创 2020-11-11 22:01:08 · 241 阅读 · 0 评论 -
“12306”的架构到底有多牛逼?
12306抢票,极限并发带来的思考?每到节假日期间,一二线城市返乡、外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会。尤其是春节期间,大家不仅使用12306,还会考虑“智行”和其他的抢票软件,全国上下几亿人在这段时间都在抢票。“12306服务”承受着这个世界上任何秒杀系统都无法超越的QPS,上百万的并发再正常不过了!笔者专门研究了一下“12306”的服务端架构,学习到了其系统设计上很多亮点,在这里和大家分享一下并模拟一个例子:如何在原创 2020-11-11 15:21:30 · 474 阅读 · 0 评论 -
网易云音乐基于 Flink + Kafka 的实时数仓建设实践
一、背景介绍(一)流平台通用框架目前流平台通用的架构一般来说包括消息队列、计算引擎和存储三部分,通用架构如下图所示。客户端或者 web 的 log 日志会被采集到消息队列;计算引擎实时计算消息队列的数据;实时计算结果以 Append 或者 Update 的形式存放到实时存储系统中去。目前,我们常用的消息队列是 Kafka,计算引擎一开始我们采用的是 Spark Streaming,随着 Flink 在流计算引擎的优势越来越明显,我们最终确定了 Flink 作为我们统一的实时计算引擎。(二)为什么选原创 2020-11-10 16:44:20 · 255 阅读 · 0 评论 -
记一次使用 Lombok 翻车造成的事故
序言去年在项目当中引入了Lombok插件,着实解放了双手,代替了一些重复的简单工作(Getter,Setter,toString等方法的编写)。但是,在使用的过程当中,也发现了一些坑,开始的时候并没有察觉到是Lombok的问题,后来跟踪了对应的其他组件的源码,才发现是Lombok的问题!Setter-Getter方法的坑问题发现我们在项目当中主要使用Lombok的Setter-Getter方法的注解,也就是组合注解@Data,但是在一次使用Mybatis插入数据的过程当中,出现了一个问题,问题描述原创 2020-11-10 14:43:19 · 268 阅读 · 0 评论 -
高质量的缺陷分析:让自己少写 bug
导读:缺陷分析做得好,bug 写得少。阿里资深技术专家和你分享如何进行高质量的缺陷分析,总结了 5个要点,通过缺陷分析消除开发中的各种盲点,打造一个学习型的团队。软件开发中的缺陷隐含着极高的价值,但是许多组织都仅仅忍受了缺陷带来的成本和后果,却让价值白白溜掉了。缺陷的价值是其触发的学习和成长的机会。把握缺陷带来的学习机会,可以快速提高组织的能力,未来的缺陷更少,成本更低,更容易成功。但同时,有效的缺陷分析和跟踪行动需要有效的方法和相应的组织的支持。缺陷隐含着极高的价值最近我们做了一次关于缺陷分析.原创 2020-11-09 16:37:01 · 451 阅读 · 1 评论 -
一次打包引发的思考,原来maven还可以这么玩
前言昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下:「大致的意思」:公司最近在整多模块开发,由于模块之间相互依赖,每次打包都很烦,必须根据依赖关系逐一进行打包,有没有省事的办法呢?其实玩转Maven的朋友都知道,只需要一条命令即可解决问题。依赖关系假设有一个多模块项目,父工程P中含有三个子模块A、B、C,三个模块有如下的依赖关系:A 依赖 B、CB 依赖 C依赖关系图父工程P的pom.xml如下:.....<modules> <module原创 2020-11-09 14:30:11 · 251 阅读 · 0 评论 -
架构的三个维度和六个层面
三个维度IT 架构IT 架构其实就是计算,网络,存储。这是云架构师的基本功,也是最传统的云架构师应该首先掌握的部分。良好设计的 IT 架构,可以降低 CAPEX 和 OPEX,减轻运维的负担。数据中心,虚拟化,云平台,容器平台都属于 IT 架构的范畴。应用架构随着应用从传统应用向互联网应用转型,仅仅搞定资源层面的弹性还不够,常常会出现创建了大批机器,仍然撑不住高并发流量。因而基于微服务的互联网架构,越来越成为云架构师所必需的技能。良好设计的应用架构,可以实现快速迭代和高并发。数据库,缓存,消息原创 2020-11-08 21:05:39 · 989 阅读 · 1 评论 -
你还在用Swagger?试试这个神器
今天给大家安利一款接口文档生成器——JApiDocs。Swagger想必大家都用过吧,非常方便,功能也十分强大。如果非要说Swaager有什么缺点,想必就是注解写起来比较麻烦。如果我说有一款不用写注解,就可以生成文档的工具,你心动了吗?他就是我们今天的主角——JApiDocs。下面我们一起来看看如何使用!一、添加依赖<dependency> <groupId>io.github.yedaxia</groupId> <artifactId>jap原创 2020-11-08 14:03:30 · 276 阅读 · 0 评论 -
【分布式】分布式锁都有哪些实现方案?
一、业务场景同一个jvm里多个线程操作同一个有状态的变量,可以通过JVM内的锁保证线程安全。如果是多个JVM操作同一个有状态的变量,如何保证线程安全呢?这时候就需要分布式锁来发挥它的作用了二、特点分布式系统往往业务流量比较大、并发较高,对分布式锁的高可用和高性能有较高的要求。一般分布式锁的方案需要满足如下要求:有高可用的获取锁和释放锁功能获取锁和释放锁的性能要好这把锁要是一把可重入锁(避免死锁)这把锁最好是一把阻塞锁(根据业务需求考虑要不要这条)这把锁最好是一把公平锁(根据业务需求考虑原创 2020-11-07 20:42:23 · 228 阅读 · 0 评论 -
如何在亿级数据中判断一个元素是否存在?
前言在日常工作中,经常要判断一个元素是否在一个集合中。假设你要向浏览器添加一项功能,该功能可以通知用户输入的网址是否是恶意网址,此时你手上有大约 1000 万个恶意 URL 的数据集,你该如何实现该功能。按我之前的思维,要判断一个元素在不在当前的数据集中,首先想到的就是使用 hash table,通过哈希函数运行所有的恶意网址以获取其哈希值,然后创建出一个哈希表(数组)。这个方案有个明显的缺点,就是需要存储原始元素本身,内存占用大,而我们其实主要是关注 当前输入的网址在不在我们的恶意 URL 数据集中,也原创 2020-11-07 17:10:07 · 546 阅读 · 0 评论 -
盘点这些年Java 集合类 List 的那些坑
现在的一些高级编程语言都会提供各种开箱即用的数据结构的实现,像 Java 编程语言的集合框架中就提供了各种实现,集合类包含 Map 和 Collection 两个大类,其中 Collection 下面的 List 列表是我们经常使用的集合类之一,很多的业务代码都离不开它,今天就来看看 List 列表的一些坑。第一个坑:Arrays.asList 方法返回的 List 不支持增加、删除操作例如我们执行以下代码:List<String> strings = Arrays.asList("m",原创 2020-11-06 14:53:05 · 243 阅读 · 0 评论 -
MySQL的insert into select 引发锁表
上周五HaC我要上线,有一个脚本需要执行,执行前需要备份一个表。运维大佬:“这个表的备份为什么要这么久,,??”1秒过去了……2秒过去了……期间运营反馈系统出现大量订单超时情况。大佬找到我,问:“你怎么备份的?”我:“insert into select * from 呀!”大佬:“??你是不是不想混了?”又是被大佬嫌弃的一天,为了不卷铺盖走人,我决定去学习一下表备份的常见方法。MySQL一般我们在生产上备份数据通常会用到 这两种方法:INSERT INTO SELECTCREAT.原创 2020-11-05 19:13:06 · 1290 阅读 · 0 评论 -
为什么 Eureka 比 ZooKeeper 更适合做注册中心?
简介Eureka本身是Netflix开源的一款提供服务注册和发现的产品,并且提供了相应的Java封装。在它的实现中,节点之间相互平等,部分注册中心的节点挂掉也不会对集群造成影响,即使集群只剩一个节点存活,也可以正常提供发现服务。哪怕是所有的服务注册节点都挂了,Eureka Clients(客户端)上也会缓存服务调用的信息。这就保证了我们微服务之间的互相调用足够健壮。Zookeeper主要为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。曾经是Hadoop项目中的一个子项目,用来控制集群中的原创 2020-11-05 16:46:05 · 191 阅读 · 0 评论