- 博客(43)
- 收藏
- 关注
原创 阿里云面试:设计模式中为什么工厂模式被称之为创建型模式?
定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method使得一个类的实例化延迟(目的:解耦 手段:虚函数)到子类。在一个工厂中,不同的产品由管理者发配给不同的车间进行生产,当有新的产品需要生产时,则建立一个新的车间,减少不同车间之间的联系。工厂模式就是模拟这样一个工厂生产方式,定义一个工厂类,通过工厂类创建不同子类对象,从紧耦合变为松耦合。
2022-09-22 15:15:52
330
原创 面试官又问起String
为什么设计为不可变类呢?String设计为不可变类主要考虑到:效率和安全。效率:1.在早期的JVM实现版本中,被final修饰的方法会被转为内嵌调用以提升执行效率。而从Java SE5/6开始,就渐渐摈弃这种方式了。因此在现在的Java SE版本中,不需要考虑用final去提升方法调用效率。只有在确定不想让该方法被覆盖时,才将方法设置为final。2.缓存hashcode,String不可变,所以hashcode不变,这样缓存才有意义,不必重新计算。
2022-09-16 13:10:29
274
原创 JVM的内存管理机制详解
Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙外面的人想进去,墙里面的人出不来对于Java程序员来说,JVM给我们提供了自动内存管理机制,不需要既当“皇帝”,又当“人民”,不需要人为地给每一个new操作写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题。然而一旦出现内存泄漏和溢出方面的问题,如果不清楚JVM内存的内存管理机制,那么将很难定位与解决问题。而且,JVM的内存管理机制在面试中也是非常重要的考点之一。
2022-09-16 11:52:24
1090
原创 什么是微服务架构
其实,很难对微服务下一个准确的定义。就像NoSQL,我们谈论了好几年的NoSQL, 知道NoSQL的大致含义,也可以根据不同的应用场景选择不同的NoSQL数据库,但是我 们还是很难对它下一个准确的定义。类似的,关于什么是“函数式编程”,也或多或少存在 同样的窘境。我们可以轻松地选择不同的函数式编程语言,可以轻松地写出函数式编程风 格的代码,但很难对什么是函数式编程下一个准确的定义。实际上,从业界的讨论来看,微服务本身并没有一个严格的定义。
2022-09-16 11:48:30
1193
原创 作为一名资深的Java架构师,你应该了解的Linux知识!
几种比较典型的Linux系统首先对目前的Linux版本有个大体的印象,大体分Desktop版和Server版,已经是百花齐放。Ubuntu 最常见的Linux个人发行版,一位有情怀的南非富豪,有了钱你也可以这么做CentOS 最常用Linux服务器发新版,RHEL的开放版本,因版权而生的轮子Arch 滚动升级,海量二进制包,社区活跃,个人最爱Gentoo 安装软件需要从源码开始编译,稳定,但用起来会很痛LFS 从零构建Linux,跟着做一遍,Linux每根毛都看的清清楚楚。
2022-09-16 11:40:49
231
原创 浅谈微服务架构分布式事务方案
1.由一组操作构成的可靠、独立的工作单元。2.ACID: atomicity(原子性) 、consistency(一致性)、isolation(隔离性)、durability(持久性)3.难点:高度并发、资源分布、大时间跨度。
2022-09-16 11:36:42
210
原创 Redis内部数据结构quicklist详解
Redis对外暴露的上层list数据类型,经常被用作队列使用。比如它支持的如下一些操作:lpush: 在左侧(即列表头部)插入数据。rpop: 在右侧(即列表尾部)删除数据。rpush: 在右侧(即列表尾部)插入数据。lpop: 在左侧(即列表头部)删除数据。这些操作都是O(1)时间复杂度的。
2022-09-15 14:08:24
280
原创 MySQL的各大存储引擎
(1)缺点:不支持事务和表级锁,因为不支持表锁,锁颗粒比较大,因此适合只读和小文件。(2)文件:数据文件和索引文件以.MYD和.MYI结尾。(3)压缩表:压缩表不能修改,可以减少磁盘占用,也可以减少磁盘I/O;支持索引,所以只读;记录单独存放,要去单行不需要解压整个表。Archive引擎会缓存所有的写并利用zlib对插入的行进行压缩,所以比MylSAM表的磁 盘I/O更少。但是每次SELECT査询都需要执行全表扫描。所以Archive表适合日志和 数据釆集类应用,这类应用做数据分析时往往需要全表扫描。
2022-09-15 13:57:20
892
1
原创 小白也能看懂的Java 垃圾回收!
垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。Java 语言出来之前,大家都在拼命的写 C 或者 C++ 的程序,而此时存在一个很大的矛盾,C++ 等语言创建对象要不断的去开辟空间,不用的时候又需要不断的去释放控件,既要写构造函数,又要写析构函数,很多时候都在重复的 allocated,然后不停的析构。
2022-09-15 13:52:18
170
原创 Mysql数据库查询好慢,除了索引,还能因为什么?
数据查询过慢一般是索引问题,可能是因为选错索引,也可能是因为查询的行数太多。客户端和数据库连接数过小,会限制sql的查询并发数,增大连接数可以提升速度。innodb里会有一层内存buffer pool用于提升查询速度,命中率一般>99%,如果低于这个值,可以考虑增大buffer pool的大小,这样也可以提升速度。查询缓存(query cache)确实能为查询提速,但一般不建议打开,因为限制比较大,并且8.0以后的Mysql里已经将这个功能干掉了。本文到此结束了,希望能对铁子们有帮助和收获。。
2022-09-14 14:43:26
226
原创 MySQL的所有命令全在这篇文章里了
在这里,我们以customers表的cust_name字段(类型为VARCHAR(50))为例,使用cust_name字段的6个字符前缀来创建索引。(3)简化对变动的管理。
2022-09-14 14:28:36
283
原创 Java的API设计实践
对于API中的接口(和抽象类)类型,重要的是API设计清楚地记录哪些类型仅由API provider实现,而API consumer不可以实现。这样的非内聚的包可能导致许多依赖性问题,因为包的不相关部分引用其他不相关的包,并且修改包的一个部分会影响依赖这个包的所有模块,即使模块实际上可能不使用被修改的这部分。对于API,接口比类更受欢迎。学习Java技术体系,设计模式,流行的框架与组件,常见的设计模式,编码必备,Spring5,做应用必不可少的最新框架,MyBatis,玩数据库必不可少的组件......
2022-09-14 14:15:03
297
原创 Java 多线程:彻底搞懂线程池
熟悉Java多线程编程的同学都知道,当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了。最近看了一些相关文章,并亲自研究了一下源码,发现有些文章还是有些问题的,所以我也总结了一下,在此奉献给大家。
2022-09-08 14:09:50
189
原创 程序员该敬畏每一行代码?填好每一个坑才是!
文章过长,大家看完也需要很长时间,小编就不一一详细写在文章里了。有需要的宝子们可以后台私信我【资料】获取哦!如果你想突破自己的天花板,那一定要比别人付出更多,这个过程是很辛苦的。如果你认准了一条路,坚持走下去,你一定会获得很多收获和你满意的答案。
2022-09-06 17:38:35
197
原创 JAVA泛型和通配符,再也不用每次百度了
泛型在类定义时不会设置类中的属性或方法参数的具体类型,而是在类使用时(创建对象)再进行类型的定义。会在编译期检查类型是否错误, 保证程序的可读性和安全性。泛型定义根据实际情况可以分为泛型类和泛型方法:>>>泛型类}}}●类中引入类型变量,类型变量指的T, U这些,用尖括号括起来, 跟在类名后面。●多个类型变量可以用逗号分隔。●在类中的方法和返回值等地方可以使用类型变量。●类型变量采用大写形式,要求简短,一般E表示集合的元素类型,K和V表示key和value等。
2022-09-06 13:52:12
1248
原创 Spring容器关闭执行销毁方法有几种?
这个问题让我很深刻,记得之前有一个面试就被问到有没有使用过。那他是什么?先来看下Spring容器的加载过程可以看到Bean从无到有主要是经历了四个步骤就是在成熟态的时候,在初始化生命周期执行回调方法主要是以接口或者注解的形式对外提供,注入到IOC容器中,完成对应的功能。
2022-09-06 13:16:51
2217
原创 Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?
纵观Java领域中“五花八门”的锁,我们可以依据Java内存模型的工作机制,来具体分析一下对应问题的提出和表现,这也不失为打开Java领域中锁机制的“敲门砖”。从本质上讲,锁是一种协调多个进程 或者多个线程对某一个资源的访问的控制机制。在上述的内容中,一般常规的概念中,我们很难会依据上述这些问题去认识和看待Java中的锁机制,主要是在学习和查阅资料的时,大多数的论调都是零散和细分的,很难在我们的脑海中形成知识体系。
2022-09-06 13:08:32
335
原创 程序员,不甘平凡又害怕努力…
自由职业之后,我计划着或尝试着做了很多事情:练习写作技巧选定职业规划课题,深入研究线下培训企业内训知乎Live猎头拆书职业规划咨询顾问……我曾经很自豪地对我身边的人说,“我永远都在探索,我觉得能行的事儿,都会去试试。”我媳妇、我的朋友们,都恭维我说,“你这状态挺好的,真让人羡慕”。然而,这些事情,大半都虎头蛇尾了……o(╥﹏╥)o,让我一件一件讲给你听。◇2017 年伊始,我就琢磨着提升自己的写作技能,买了一堆的书和课,《故事》、《成为作家》、《文心》、《怎样讲好一个故事》、《开发故事创意》、《作家之旅》、
2022-09-06 10:23:00
222
原创 Netty框架整体架构及源码知识点
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。Netty 利用 Java 高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 构建一个客户端/服务端,其具有高并发、传输快、封装好等特点。
2022-09-05 17:06:42
323
原创 分布式服务(RPC)+分布式消息队列(MQ)面试题精选
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式消息队列(MQ)为什么使用 MQ?异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处...
2019-05-07 14:33:47
597
原创 用Java从零写一个B2C商城,看完不要再说自己没有实战经验了!
一、B2C商城实战需要哪些技术点要想立足于互联网公司,且能在互联网浪潮中不被淹没,对于项目的开发实战演练是不必可少的技能,也是对自身能力的一个衡量,有多少的量对等于获得多少的回报。看似简单的一个项目需求图谱,其中的底层原理,实现原理又能知道多少?你搭建一个完整的B2C项目平台到底需要多少知识?这一切都是需要我们考量的。从架构设计,到应用层调优,再深入了解底层原理,扎实的Java基本功才能让...
2019-05-04 21:58:23
772
原创 Kafka or RabbitMQ:消息中间件选型深入分析
一、前言消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。目前开源的消息中间件可谓是琳琅满目,能让大家耳熟能详的就有很多,比如Acti...
2019-04-24 21:20:20
251
原创 Java:并发不易,先学会用
我从事Java编程已经11年了,绝对是个老兵;但对于Java并发编程,我只能算是个新兵蛋子。我说这话估计要遭到某些高手的冷嘲热讽,但我并不感到害怕。因为我知道,每年都会有很多很多的新人要加入Java编程的大军,他们对“并发”编程中遇到的问题也会有感到无助的时候。而我,非常乐意与他们一道,对使用Java线程进行并发程序开发的基础知识进行新一轮的学习。01、我们为什么要学习并发?我的脑袋没...
2019-04-22 21:52:22
266
原创 分布式锁之Redis实现
在Java中,关于锁我想大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常,我们以synchronized 、Lock来使用它。但是Java中的锁,只能保证在同一个JVM进程内中执行。如果在分布式集群环境下呢?一、分布式锁分布式锁,是一种思想,它的实现方式有很多。比如,我们将沙滩当做分布式锁的组件,那么它看起来应该是这样的:加锁在沙滩上踩一脚,留下...
2019-04-22 21:04:33
394
原创 JAVA中各种锁介绍
java中的锁按状态,特性,功能,实现可以划分为多种锁; 公平锁/非公平锁,可重入锁,独享锁/共享锁,互斥锁/读写锁,乐观锁/悲观锁,分段锁,偏向锁/轻量级锁/重量级锁,自旋锁乐观锁,悲观锁从并发同步的角度。悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观的认为,不加锁的并发操作一定会出问题...
2019-04-22 21:00:34
205
原创 深入理解 Java 反射和动态代理
简介什么是反射反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。通过反射机制,可以在运行时访问 Java 对象的属性,方法,构造方法等。反射的应用场景反射的主要应用场景有:开发通用框架- 反射最重要的用途就是开发各种通用框架。很多框架(比如 Spring)都是配置化的(比如通过 ...
2019-04-22 17:32:32
184
原创 史上最详细的一线大厂Mysql面试题详解
1、MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联;主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;从:sql执行线程——执行relay log中的语句;2、MySQL中myisam与i...
2019-04-22 16:53:59
391
原创 Java大神进阶之路!每一位程序员值得借鉴!
既然励志在java路上走的更远,那就必须了解java的路径。先看图image.png更加细化的细节如下一: 编程基础不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还是要有的。下面几篇文章从思想到实现,为你梳理出常用的数据结构和经典算法。1-1 常用数据结构数组、链表、堆、栈、队列、Hash表、二叉树等1-2 算法思想...
2019-04-22 16:51:26
240
原创 MyBatis框架介绍及实战操作
一、基本概念和介绍数据持久化的概念数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型、XML、二进制流等。当我们编写应用程序操作数据库,对表数据进行增删改查的操作的时候就是数据持久化的操作。Mybatis框架简介MyBatis框架是一个开源的数据持久层框...
2019-04-19 21:58:38
700
原创 Java架构师面试题全分享,你离架构师还有多远?
基础题目Java线程的状态进程和线程的区别,进程间如何通讯,线程间如何通讯 HashMap的数据结构是什么?如何实现的。和HashTable,ConcurrentHashMap的区别 Cookie和Session的区别 索引有什么用?如何建索引? ArrayList是如何实现的,ArrayList和LinkedList的区别?ArrayList如何实现扩容。 equals方法实现...
2019-04-17 21:38:01
160
原创 面试大杀器:消息中间件如何实现消费吞吐量的百倍优化?
目录(1)前请提示(2)unack消息的积压问题(3)如何解决unack消息的积压问题(4)高并发场景下的内存溢出问题(5)低吞吐量问题(6)合理设置prefetch count(7)阶段性总结1、前情提示这篇文章,我们将会对ack底层的delivery tag机制进行更加深入的分析,让大家理解的更加透彻一些。面试时,如果被问到消息中间件数据不丢失问题的时候...
2019-04-17 21:10:38
635
原创 Java程序员面试实战
出于一些原因近期做了一次工作变动,在职交接近一个半月时间大概面试了十五家公司,并且得到了自己比较满意的offer,最后基本上无缝衔接了新工作。总体来说,虽然准备的很充分,但面试期间还是暴露了许多问题,所以做下总结,供大家和自己以后参考,主要分四部分讲述:简历方面,格式内容包括七个板块,个人简介,求职意向,工作经历,项目经历,技能描述,学历背景,自我评价。如果自己或公司没有其他特殊要求,这些...
2019-04-17 20:57:04
360
原创 如何在 Java8 中风骚走位避开空指针异常
要说 Java 编程中哪个异常是你印象最深刻的,那 NullPointerException 空指针可以说是臭名昭著的。不要说初级程序员会碰到, 即使是中级,专家级程序员稍不留神,就会掉入这个坑里。Null 引用的发明者 Tony Hoare 曾在 2009 年作出道歉声明,声明中表示,到目前为止,空指针异常大约给企业已造成数十亿美元的损失。下面是 Tony Hoare 的原话:我将...
2019-04-17 20:51:38
159
原创 开发者应该掌握的Java代码优化技能
就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了。代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了。这个观点,在现在看来,是要进行代码优化的一个原因,但不全对。在机械工艺发展的今天,服务器动辄8核、16核,64位CPU,代码执行效率非常高,StringBui...
2019-04-17 16:51:41
255
原创 Java并发编程:JMM (Java内存模型) 以及与volatile关键字详解
计算机系统的一致性在现代计算机操作系统中,多任务处理几乎是一项必备的功能,因为嵌入了多核处理器,计算机系统真正做到了同一时间执行若干个任务,是名副其实的多核系统。在多核系统中,为了提升CPU与内存的交互效率,一般都设置了一层 “高速缓存区” 作为内存与处理器之间的缓冲,使得CPU在运算的过程中直接从高速缓存区读取数据,一定程度上解决了性能的问题。但是,这样也带来了一个新问题,就是“缓存一致性”...
2019-04-16 21:39:39
146
原创 分析Java在2019年的形势
2018年已经过去了,在这一年中,Java开发者热衷于什么?什么版本和框架是受众比较高的?这里用一系列数据和图表来让大家了解下在2018年整个Java平台的趋势。1. Java版本的采用率毫无意外,Java8依然在开发社区中占主要地位:Java9和Java10的采用率依然非常低,分别都只有低于5%的占比。作为参考,在2017年采用占比为24.4%的Java7在现在也只占了1...
2019-04-16 21:14:25
1160
原创 程序员:成为理想的程序员你差多少?
也许我们都不是天才的程序员,但至少我们都可以成为一个理想的程序员。我在虚张声势面前欺骗了程序员,一路都是这样。26岁之前,在写代码时几乎没有经验,研究生竟然选择可能在公司倒闭的日常问题提供培训创业,被解雇的恐惧和压力下上游三个同事冷漠的眼神,离开后的一年半的时间,对主要过程的背面有产品的500万用户。我害怕的是计算机技术和技术专家必须有佛的面具,在密钥传输代码万行的白天和黑夜。现在我看到了一些世...
2019-04-16 21:03:14
1214
原创 Nginx使用总结
Nginx安装安装tar zxvf nginx-1.2.9.tar.gz#解压nginxcdnginx-1.2.9#进入目录./configure--prefix=/opt/soft/nginx--with-http_stub_status_module--with-http_ssl_module--with-http_realip_module#配置安装模块make install#安装复...
2019-04-16 20:57:55
180
原创 Java 面试之技术框架
Spring简介Spring 是一种用来简化企业级应用开发的开源框架,包括Spring Framework, Spring Data, Spring Security,Spring Boot,SpringMVC等。Spring 家族最核心的概念当属 AOP 和 IoC,详解见下节。其中 Spring 优点如下:降低了组件之间的耦合性 ,实现了软件各层之间的解耦可以使用便捷的众多服务,...
2019-04-16 20:50:56
366
原创 netty原理分析
Netty简介Netty是一个高性能、异步事件驱动的NIO框架,基于JAVA NIO提供的API实现。它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。 作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、...
2019-04-15 17:41:54
124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人