自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 问答 (13)
  • 收藏
  • 关注

原创 算法一看就懂之「 队列 」

算法的系列文章中,之前咱们已经聊过了「 数组和链表 」、「 堆栈 」,今天咱们再来继续看看「 队列 」这种数据结构。「 队列 」和「 堆栈 」比较类似,都属于线性表数据结构,并且都在操作上受到一定规则约束,都是非常常用的数据类型,咱们掌握得再熟练也不为过。一、「 队列 」是什么?队列(queue)是一种先进先出的、操作受限的线性表。队列这种数据结构非常容易理解,就像我们平时去...

2019-08-31 16:14:18 106

原创 日均7亿交易量,如何设计高可用的MySQL架构?

本文作者将给大家分享工行基于 MySQL 构建分布式架构的转型之路!将围绕如下几个方面展开:工行 IT 架构转型中传统 OLTP 数据库架构面临的挑战和诉求。 构建基于 MySQL 分布式企业级解决方案实践历程,包括技术选择、高可用设计、两地三中心容灾、运维管理、资源使用效率等方面的思考和实践经验。 工行转型的成效以及对后续工作的一些思考。数据库转型背景传统 IT 架构的挑...

2019-08-31 15:39:01 210

原创 算法一看就懂之「 队列 」

算法的系列文章中,之前咱们已经聊过了「 数组和链表 」、「 堆栈 」,今天咱们再来继续看看「 队列 」这种数据结构。「 队列 」和「 堆栈 」比较类似,都属于线性表数据结构,并且都在操作上受到一定规则约束,都是非常常用的数据类型,咱们掌握得再熟练也不为过。一、「 队列 」是什么?队列(queue)是一种先进先出的、操作受限的线性表。队列这种数据结构非常容易理解,就像我们平时去...

2019-08-31 15:05:12 115

原创 面试再问ThreadLocal,别说你不会

ThreadLocal是什么以前面试的时候问到ThreadLocal总是一脸懵逼,只知道有这个哥们,不了解他是用来做什么的,更不清楚他的原理了。表面上看他是和多线程,线程同步有关的一个工具类,但其实他与线程同步机制无关。线程同步机制是多个线程共享同一个变量,而ThreadLocal是为每个线程创建一个单独的变量副本,每个线程都可以改变自己的变量副本而不影响其它线程所对应的副本。官方A...

2019-08-30 18:53:50 88

原创 今天我们就来讲讲怎么看源码

这篇文章我们就来讲一讲为什么要看源码,怎么看源码为什么看源码面试随便一个面试无论大小,是不是都会遇到给我讲一下HashMap、ArrayList、ConcurrentHashMap的原理,那么如果你不自己看源码,而是随便从网上看看分析文章,很难体会到其中的奥妙。设计很多时候你在自己开发,可能会遇到一些设计问题,绞尽脑汁,也查阅了很多设计模式的入门文章,但是就是不知道怎么设...

2019-08-30 17:51:04 448

原创 什么场景下不应该使用 TypeScript?

TypeScript 很棒,但有时用它编程只是在浪费时间。TypeScript 的优势在于它能在编译时调试 JavaScript,但有些情况并不适合我们使用 TypeScript,比如构建小型应用程序或原型应用时。作为一名前 C# 程序员,我是 TypeScript 和强类型编程语言的忠实粉丝——说是这么说,但我也知道不是每个项目都很适合用 TypeScript 的。本文将探讨哪些类型的项目中...

2019-08-30 17:32:34 2198

原创 Redis基础都不会,好意思出去面试?

Redis的数据结构Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景。五种基础数据结构String:字符串,是构建其他数据结构的基础 Hash:哈希列表 List:列表 Set:集合,在哈希列表的基础上实现 Sort Set:有序集合复杂的数据结构Bitmaps:位图,在string的基础上进行位操作,可以实现...

2019-08-30 16:54:08 81

原创 MySQL查询成本和范围区间

B+树结构我们说对于InnoDB存储引擎来说,表中的数据都存储在所谓的B+树中,我们每多建立一个索引,就相当于多建立一棵B+树。对于聚簇索引对应的B+树来说,叶子节点处存储了完整的用户记录(所谓完整用户记录,就是指一条聚簇索引记录中包含所有用户定义的列已经一些内建的列),并且这些聚簇索引记录按照主键值从小到大排序。 对于二级索引对应的B+树来说,叶子节点处存储了不完整的用户记录(所谓不完...

2019-08-28 19:07:47 3200

原创 JVM内存结构最难的面试题

1、JVM管理的内存结构是怎样的?2、不同的虚拟机在实现运行时内存的时候有什么区别?3、运行时数据区中哪些区域是线程共享的?哪些是独享的?4、除了JVM运行时内存以外,还有什么区域可以用吗?5、堆和栈的区别是什么?6、Java中的数组是存储在堆上还是栈上的?7、Java中的对象创建有多少种方式?8、Java中对象创建的过程是怎么样的?9、Java中的对象一定在堆上分...

2019-08-28 18:49:48 180

原创 confd + Nacos | 无代码侵入的配置变更管理

为什么要支持confd,老的应用配置管理模式是启动时读取配置文件,然后重新读取配置文件需要应用重启。一般的配置管理系统都是代码侵入性的,应用接入配置管理系统都需要使用对应的SDK来查询和监听数据的变更。对于一些已经成熟的系统来说,接入SDK来实现动态配置管理是很难实现的,Nacos通过引入配置管理工具confd可以实现系统的配置变更做到无代码侵入性。confd是一个轻量级的配置管理工具,可...

2019-08-28 16:42:44 343

原创 解决Spring Cloud Alibaba/Spring Cloud整合Zipkin后的报错问题

TIPS•本文服务发现组件以Nacos为例。•本文基于 Spring Cloud Greenwich SR1问题复现依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin<...

2019-08-28 14:15:21 6935 2

转载 日志排查问题困难?分布式日志链路跟踪来帮你

背景开发排查系统问题用得最多的手段就是查看系统日志,在分布式环境中一般使用ELK来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,由于大量的其他用户/其他线程的日志也一起输出穿行其中导致很难筛选出指定请求的全部相关日志,以及下游线程/服务对应的日志。解决思路每个请求都使用一个唯一标识来追踪全部的链路显示在日志中,并且不修改原有的打印方式(代码无入侵) 使用Logback的MD...

2019-08-26 11:38:15 492

转载 使用Redis实现延时任务

前提最近在生产环境刚好遇到了延时任务的场景,调研了一下目前主流的方案,分析了一下优劣并且敲定了最终的方案。这篇文章记录了调研的过程,以及初步方案的实现。候选方案对比下面是想到的几种实现延时任务的方案,总结了一下相应的优势和劣势。如果应用的数据量不高,实时性要求比较低,选用调度框架和MySQL进行短间隔轮询这个方案是最优的方案。但是笔者遇到的场景数据量相对比较大,实时...

2019-08-22 17:19:44 889

原创 Java程序员面试必备的一些流程图

前言:整理了一些Java基础流程图/架构图,做一下笔记,大家一起学习。1.spring的生命周期Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要;首先容器启动后,对bean进行初始化 按照bean的定义,注入属性 检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean,如B...

2019-08-22 10:15:01 237

转载 后端架构设计,如何扛住100亿次请求?

1. 前言前几天,偶然看到了 《扛住100亿次请求——如何做一个“有把握”的春晚红包系统”》一文,看完以后,感慨良多,收益很多。正所谓他山之石,可以攻玉,虽然此文发表于2015年,我看到时已经过去良久,但是其中的思想仍然是可以为很多后端设计借鉴。同时作为一微信后端工程师,看完以后又会思考,学习了这样的文章以后,是否能给自己的工作带来一些实际的经验呢?所谓纸上得来终觉浅,绝知此事要躬行,能否...

2019-08-21 18:04:16 179

转载 springboot 2.0源码分析

SpringApplication 实例 run 方法运行过程来看下这个 SpringApplication 对象的 run 方法的源码和运行流程。public ConfigurableApplicationContext run(String... args) { // 1、创建并启动计时监控类 StopWatch stopWatch = new StopWatch();...

2019-08-21 16:15:05 116

转载 我艹,MySQL数据量大时,delete操作无法命中索引

最近,在脉脉上看到一个楼主提出的问题:MySQL数据量大时,delete操作无法命中索引;并且还附上了相关案例截图。最终,楼主通过开启MySQL分析优化器追踪,定位到是优化器搞的鬼,它觉得花费时间太长。因为我这个是测试数据,究其原因是因为数据倾斜,导致计算出的数据占比较大、花费时间长。大家要记住一点,一条SQL语句走哪条索引是...

2019-08-21 15:20:48 417

转载 Java并发异步编程,原来十个接口的活现在只需要一个接口就搞定

什么?对你没有听错,也没有看错 ..多线程并发执行任务,取结果归集~~ 不再忧愁….引言先来看一些APP的获取数据,诸如此类,一个页面获取N多个,多达10个左右的一个用户行为数据,比如:点赞数,发布文章数,点赞数,消息数,关注数,收藏数,粉丝数,卡券数,红包数……….. 真的是多~ 我们看些图:平时要10+接口的去获取数据(因为当你10...

2019-08-20 18:44:40 218

转载 基于redis分布式锁实现“秒杀”

最近在项目中遇到了类似“秒杀”的业务场景,在本篇文章中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。业务场景所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源,这里的资源在大部分秒杀场景里是商品;将业务抽象,技术角度看,秒杀就是多个线程对资源进行操作,所以实现秒杀,就必须控制线程对资源的争抢,既要保证高效并发,也要保证操作的正确。一些可能的实现刚才提到过,实现秒杀的关...

2019-08-20 17:03:12 93

转载 Spring Cloud Stream实现消息过滤消费

IPS本文基于Spring Cloud Greenwich SR1 + spring-cloud-starter-stream-rocketmq 0.9.0理论兼容:Spring Cloud Finchley+ +spring-cloud-starter-stream-rocketmq 0.2.2+MQ使用的是RocketMQ,也可使用Kafka或者RabbitMQ。本文探讨Spring ...

2019-08-16 18:26:37 606

原创 携程大佬带你写一个可扩展的Spring插件

# 背景介绍Spring现在几乎已经成为了Java开发的必备框架,在享受Spring框架本身强大能力的同时,有时我们也会希望自己研发的组件和Spring进行整合,从而使得组件更易于上手,而且配合Spring使用能发挥更强大的作用。Apollo配置中心的Java客户端在前一段时间也提供了和Spring整合的功能,Apollo既支持传统的基于XML的配置,也支持目前比较流行的基于Java的配置...

2019-08-16 15:58:31 836

转载 「灵魂拷问」MySQL面试高频一百问(工程师方向)

前言本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水.前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来.因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点.此文...

2019-08-09 17:02:10 230

转载 挑战10个最难回答的Java面试题(附答案)

这是我收集的10个最棘手的Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但这些问题都是容易在各种 Java 面试中被问到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。1.为什么等待和通知是在 Object 类而不是 Thread 中声明的?一...

2019-08-09 10:29:49 504

原创 深入理解SpringBoot启动机制(starter机制)

一、前言使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程。本文的目的就是一步步分析springboot的启动过程,这次主要是分析springboot特性自动装配。那么首先带领大家回顾一下以往我们的web项目是如何搭建的,通常我们要搭建一个基于Spring的Web应用,我们需要做以下一些工作:...

2019-08-08 16:15:28 2754 1

原创 SQL语句练习50题(MySQL版)

表名和字段–1.学生表Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别–2.课程表Course(c_id,c_name,t_id) – --课程编号, 课程名称, 教师编号–3.教师表Teacher(t_id,t_name) --教师编号,教师姓名–4.成绩表Score(s_id,c_id,s_score) --学生...

2019-08-07 18:21:19 136

转载 Redis,我有7个问题想请教你

Hello,Redis!我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住,能否再让我多问你的几个问题,让我更加深入的去了解你。一、Redis 的通讯协议是什么Redis 的通讯协议是文本协议,是的,Redis 服务器与客户端通过 RESP(Redis Serialization Protocol)协议通信。没错,文本协议确实是会浪费流量,不过...

2019-08-06 14:25:41 158

转载 月薪70K技术专家,应该是什么水平?

一般来说一些业务架构、应用架构、产品功能决策、技术选型、协作分工等问题应该在P8层次终结,P8是一线作战的小队长,向下提供决策,向上提供有效的信息。能达到月入70K的P8 或者P9Java技术专家级别,不仅要具备优秀的编程能力和系统设计能力,在技术视野和业务洞察力方面,也要有很深的积淀。今天刚好有此机会,经过半年多的时间我整理一份架构图谱,主要是针对2-5年左右的Java开发程...

2019-08-06 11:15:49 821

原创 敲黑板,本文的这些流程图面试必考

整理了一些Java基础流程图/架构图,做一下笔记,大家一起学习。1、spring的生命周期Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要;首先容器启动后,对bean进行初始化 按照bean的定义,注入属性 检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean,如BeanNameAwar...

2019-08-02 15:49:26 136

转载 如果讲不明白Spring Cloud核心组件,那我就白编故事了

这几天可真是热啊,泡个海澡是再好不过了。玩的正起劲,突然脚底绊上一股暗流,然后我就一直在水里旋转旋转旋转…终于眼前一黑。爱的魔力转圈圈。我穿越了。邻国相望,鸡犬之声相闻,民至老死不相往来。这个世界被小诸侯给切的七零八落,一锅乱麻。而现实是,我的国家因为常年打仗,剩下的女人很多,需要打通远嫁他方的通道;而A国盛产长得和猪一样大的耗子,卖的很好。它们可以做成皮大氅,用...

2019-08-02 15:42:18 216

原创 几种常用 JSON 库性能比较

本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲手测试过的才是最值得相信的。JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。目前对于Java开源的JSON类库有很多种,下...

2019-08-02 11:14:40 141

转载 Spring Boot2.X数据访问的三种主流姿势JDBC、MyBatis、JPA

本文参照官方说明文档,可放心引用。创建Spring Boot项目之后,开始对Dao层配置。一、原生默认的数据库统一接口标准JDBC1、pom文件中添加JDBC依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-...

2019-08-01 18:17:02 272

原创 经典面试题:为啥 ConcurrentHashMap 读操作不需要加锁?

我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?ConcurrentHashMap的简介我想有基础的同学知道在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Se...

2019-08-01 15:54:42 117

原创 经典面试题:为啥 ConcurrentHashMap 读操作不需要加锁?

我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?ConcurrentHashMap的简介我想有基础的同学知道在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Se...

2019-08-01 15:40:06 146

原创 经典面试题:为啥 ConcurrentHashMap 读操作不需要加锁?

我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?ConcurrentHashMap的简介我想有基础的同学知道在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Se...

2019-08-01 15:39:31 95

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除