随笔分类 - 大厂面试
摘要:
Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现,用来替代Ribbon.本篇从常见使用示例开始,一步步分析源码实现原理,最后还通过一个自定义负载均衡算法加深对源码的理解
阅读全文

摘要:
简单的说Spring Cloud OpenFeign是对Feign一个增强,使其支持Spring MVC注解,并与SpringCloud完成整合,本篇从简单示例入手,熟悉锲约配置、超时时间、自定义拦截器、日志,最后通过@EnableFeignClients入手一步步分析核心源码实现。
阅读全文

摘要:
本篇了解大厂都在使用的ZGC的基础原理和处理过程,了解JVM性能调优的大致步骤和过程,配合之前文章Arthas线上诊断工具
阅读全文

摘要:
Tomcat作为Java技术栈最为熟悉、经典、最有代表性的Web容器,为了深入学习Tomcat优秀设计思想,先从Tomcat10.0.12源码编译开始,记录编译问题并解决,再手写一个简单Java Servlet内嵌Tomcat示例,从Tomcat配置文件窥探其底层设计如连接器、四大容器组件、管道等,非常清楚知道Tomcat全局实现功能,如果要手写一个简易Tomcat从Netty监听网络端口开始,待续。
阅读全文

摘要:
Redis作为目前最主流缓存数据库毫无疑问独霸一方,使其作为大厂Java后台开发面试的必考点之一,本篇将剖析Redis为什么性能高和快的原因,Redis也是分布式锁的实现方案之一,此外还涉及到缓存预热、缓存穿透、缓存雪崩、缓存击穿、缓存更新、缓存降级等介绍。Redis常见使用场景:计数器、分布式ID生成器、海量数据统计bitmap、会话缓存、分布式阻塞队列、分布式锁、热点数据、社交需求好友推荐、延迟队列(sortset)等。Redis提供丰富的数据结构,如字符串、哈希、列表、集合、带范围查询、位图、超对数、地理空间索引和流的排序集。Redis具有内置的复制、Lua脚本、LRU驱逐、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster的自动分区提供高可用性。
阅读全文

摘要:
将原理与实际操作经验相结合,本章不讲sql用法,主要针对的是开发人员需掌握的一些MySQL面试的知识点,涉及索引、事务、优化等方面,以及大厂SQL使用规约
阅读全文

摘要:
Apache Kafka是一个开源的分布式事件流平台,使用Scala和Java混合编写,Kafka最初由Linkedin公司开发,2011年贡献给了Apache基金会并成为顶级开源项目。消息队列就是用于数据生产方和消费方解耦合的中间件。顾名思义,主体就是一个队列的形式收集消息,数据在消费端按照FIFO的原则被消费。近几天连续学习两个Apache的开源项目,今天我们又来学习另外一个Apache顶级开源项目Kafka,可以见得Apache在开源世界的绝对大佬地位。Kafka是一个基于Zookeeper协调的支持分区(partition)、多副本(replica)的分布式消息系统,最大特性是可以实时处理大量数据以满足各种需求场景,常用于大数据场景消息流中间件;其他消息队列有ActiveMQ、RabbitMQ、ZeroMQ、MetaMQ、RocketMQ,目前比较主流消息中间件是Kafka、RocketMQ和RabbitMQ。
阅读全文

摘要:
今天我们又来学习一个Apache顶级项目Apache RocketMQ,RocketMQ由国人阿里团队采用Java语言开发和开源的,曾获得2016、2018中国最受欢迎的开源软件奖。RocketMQ凭借其强大的存储能力和强大的消息索引能力,以及各种类型消息和消息的特性脱颖而出。Apache RocketMQ官网地址及其GitHub都提供非常详细中文学习文档如Apache RocketMQ开发者指南等,学习起来可谓是非常之流畅、酸爽、so easy!让我们通过官网和及其GitHub来深入学习这个与时俱进非常优秀互联网主流的消息中间件。阿里早期是基于ActiveMQ 5的分布式消息传递中间件,随着队列和虚拟主题的增加ActiveMQ IO模块达到了瓶颈,当时也研讨过Kafka但当时的Kafka不能满足阿里的要求(特别是在低延迟和高可靠性方面),因此阿里决定自行研发一个消息中间件,从传统的发布/订阅场景到高容量的实时零损失容忍度事务系统,这就是RocketMQ诞生的原因。
阅读全文

摘要:
Netty 是目前Java技术栈中最流行的、首选的 NIO 框架,性能和稳定性都有保障,社区比较活跃,基于 Netty 进行二次定制服务开发成本小,提供了简单易用的API从网络处理代码中解耦业务逻辑,且已得到成百上千的商业及商用项目验证,许多框架和开源组件的底层 rpc 都是使用的Netty,如Dubbo、Elasticsearch 、RocketMQ以及大数据Hadoop、Spark等等。Netty由JBOSS提供的一个Java开源框架,现为 Github上的独立项目Netty从许多协议如FTP、SMTP、HTTP和各种基于二进制和文本的协议的实现精心设计从而兼顾实现了易于开发、性能、稳定性和灵活性。分为核心层、传输服务、协议支持。
阅读全文

摘要:
这样学习ZooKeeper离大厂所需技能要求还远吗,开发者、管理员、维护员等不同角色学习ZooKeeper的关注点不同,本篇则兼顾多方的角度切入并深入理解ZooKeeper,了解其功能、特性、应用场景、集群部署,逐步引出分布式理论核心知识点,最后深入到架构原理,引出分布式一致性协议Paxos算法、Raft协议以及ZooKeeper独创的Zab协议,如何选主如何写数据,可谓覆盖到大厂面试方方面面的考点。Apache ZooKeeper是一种用于构建分布式应用的高性能、高度可靠、开源的分布式协调服务,提供如配置信息维护、命名、分布式同步、组服务等功能,可以实现如分布式共识、组管理、领导选举和到场协议;同时也是Google的Chubby一个Java语言版的开源实现。ZooKeeper翻译为中文则为动物园管理员,而众所周知ZooKeeper是大数据生态下的重要组件,是大数据生态的基石之一,而我们也知道大部分大数据生态下组件是以动物命名并作为其Logo,比如Hive、Hbase、Flink等,所以ZooKeeper命名就更加生动贴切。
阅读全文

摘要:
Apache Tomcat软件是Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta annotation和Jakarta Authentication规范的开源实现。简单来说也是一个基于Servlet、JSP规范的轻量级Web应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,也是大部分Java技术栈开发和调试Web程序的首选。Tomcat、Jetty、Undertow这几个都是非常有名实现Servlet规范的应用服务器,Tomcat本身也是业界上非常优秀的中间件,简单可可以将Tomcat看成是一个Http服务器+Servlet容器,Servlet 容器是管理和运行 Servlet 的;相信大家对这只三脚猫Logo都是非常熟悉了,不管是在学校和还是工作都经常使用它
阅读全文

摘要:
MySQL发展至今仍然是世界上最流行的关系型数据库管理系统,使用C和C++语言编写,并且为很多种编程语言提供API.能够处理千万级别的数据,市场占有量还是老大哥地位。MySQL创立于1996年,最初是由瑞典 MySQL AB公司开发所有,在2008年被Sun公司收购,而Sun公司又在2009年被Oracle公司收购,目前MySQL属于Oracle旗下的产品。MySQL官网提供了多种版本,我们来了解一些,但我们常用的还是社区版本。
阅读全文

摘要:
Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。Redis提供丰富的数据结构,如字符串、哈希、列表、集合、带范围查询、位图、超对数、地理空间索引和流的排序集。Redis具有内置的复制、Lua脚本、LRU驱逐、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster的自动分区提供高可用性。Redis使用场景:计数器、分布式ID生成器、海量数据统计bitmap、会话缓存、分布式阻塞队列、分布式锁、热点数据、社交需求好友推荐、延迟队列(sortset)等。
阅读全文

摘要:
本篇将实战nginx常用功能和高级特性、剖析限流算法,并逐步带入到进阶的OpenResty和引出基于OpenResty(Nginx + Lua模块)编写的高性能款、高可用、易扩展且开源的API Gateway项目的Kong网关,最后给大家来一个并发编程十个小面试题收尾压压惊,相信读完的伙伴和笔者一样可以收获满满。我们通常使用开源的Nginx版本,但基于Nginx开源版本至上还衍生包括商业收费版本的Nginx Plus、淘宝开源的TEngine、OpenResty三大分支,可以说只要有网站或者后台服务的企业就会需要用到Nginx,其使用极为广泛。
阅读全文

摘要:
多进程实现并发编程强调的是稳定性,每个进程有自己独立的地址空间,一个进程挂了不影响其他的进程,但进程间的通信方式实现还是比较麻烦的,比如管道、有名管道、信号量、消息队列、信号、共享内存、套接字等。多线程实现并发编程主要是共享进程的地址空间,一个线程挂了或者写乱数据有可能影响其他线程甚至整个应用程序,也即是常说线程安全问题,多线程交换数据比较方便,线程之间的通信也可以直接通过内存来实现。多线程其实并不是多个线程一起执行,而是因为线程之间切换的速度非常的快,所以我们看起来像不间断的执行。
阅读全文
