自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 面试官:单核 CPU 支持 Java 多线程吗?为什么?

超线程这个概念是Intel提出的,简单来说是在一个CPU上真正的并发两个线程,由于CPU都是分时的(如果两个线程A和B,A正在使用处理器核心,B正在使用缓存或者其他设备,那AB两个线程就可以并发执行,但是如果AB都在访问同一个设备,那就只能等前一个线程执行完后一个线程才能执行)。指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。时间片是CPU分配给各个任务(线程)的时间!

2022-09-16 20:46:04 334 1

原创 Java如何支持函数式编程?

背景在很长的一段时间里,Java一直是面向对象的语言,一切皆对象,如果想要调用一个函数,函数必须属于一个类或对象,然后在使用类或对象进行调用。但是在其它的编程语言中,如JS、C++,我们可以直接写一个函数,然后在需要的时候进行调用,既可以说是面向对象编程,也可以说是函数式编程。从功能上来看,面向对象编程没什么不好的地方,但是从开发的角度来看,面向对象编程会多写很多可能是重复的代码行。比如创建一个Runnable的匿名类的时候:这一段代码中真正有用的只有run方法中的内容,剩余的部分都是属于Java编程

2022-09-16 20:28:21 257

原创 Redis之持久化和事务

redis的数据都是存放在内存中的,所以当出现断电、系统崩溃等异常时,这些数据就丢失了,为此,我们需要利用永久性的存储介质将这些数据保存起来,这样就可以在出现问题的时候再将数据从存储介质上恢复回来。redis提供了两种数据持久化的方式,RDB和AOF,其中RDB是以快照的方式进行保存,而AOF则以日志的方式进行保存,下面分别介绍。

2022-09-14 16:47:52 356

原创 阿里云面试:什么是语法糖?Java中有哪些语法糖?

上面这段代码,有两个重载的函数,因为他们的参数类型不同,一个是List另一个是List,但是,这段代码是编译通不过的。从反编译后代码可以看出,可变参数在被使用的时候,他首先会创建一个数组,数组的长度就是调用该方法是传递的实参的个数,然后再把参数值全部放到这个数组当中,然后再把这个数组作为参数传递到被调用的方法中。Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。

2022-09-14 14:07:35 170

原创 这份Java日志格式规范,拿走不谢!

在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方。写好程序的日志可以帮助我们大大减轻后期维护压力。在实际的工作中,开发人员往往迫于巨大时间压力,而写日志又是一个非常繁琐的事情,往往没有引起足够的重视。开发人员应在一开始就养成良好的日志撰写习惯,并且应在实际的开发工作中为写日志预留足够的时间。

2022-09-07 21:39:47 229

原创 【无标题】

试想一下,如果是一个固定的get方法,那么get到的是一个固定的实例,SPI 还有什么意义呢?SPI 的目的,就是增强扩展性。将固定的配置提取出来,通过 SPI 机制来配置。那既然如此,一般都会有一个默认的配置,然后通过 SPI 的文件配置不同的实现,这样就会存在一个接口多个实现的问题。要是找到多个实现的话,用哪个实现作为最后的实例呢?所以这里使用iterator来获取所有的实现类配置。刚才已经在我们这个。

2022-09-07 21:08:05 74

原创 图解 Java 垃圾回收机制,写得非常好

自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存由回收器负责。本文接下来将介绍垃圾回收机制的基本过程。

2022-09-07 20:50:57 203

原创 Redis进阶知识一览

最后,让我们来看一下下方的思维导图进行梳理内容:复习本阶段开篇讲述了分布式相关,其实分布式和集群的概念在前期就介绍过了,不同的节点做着不同的事,就是分布式,不同的节点做着相同的事就是集群。那么Redis是NoSql,不仅仅是sql,功能更强劲,可以作为缓存写入内存,提供高速访问,为数据库做了一道屏障,保护数据库,把热点数据放入缓存,从而提升项目的并发量与吞吐量。

2022-09-07 16:57:21 98

原创 关于Java中泛型、反射和注解的扫盲篇

由于反射需要获取到相关的类全名(类名+包名),因此我们还需要记录哪些类是通过反射来获取的。我们可以通过XML来保存类相关的信息已供反射用,此外,我们还可以通过注解来保存类相关信息以供反射调用。注解:提供一种为程序元素设置元数据的方法元数据是添加到程序元素如方法、字段、类和包上的额外信息注解是一种分散式的元数据设置方式,XML是集中式的设置方式注解不能直接干扰程序运行。

2022-09-07 16:30:16 124

原创 巨坑系列:Java Bean 转 Map 的坑要注意

Java Bean 转 Map 的坑很多,最常见的就是类型丢失和属性名解析错误的问题。平时使用某些框架时,多写一些 DEMO 进行验证,多读源码,多调试,少趟坑。关键代码:net.sf.cglib.core.ReflectUtils#getBeanGetters 底层也会用到 java.beans.Introspector#decapitalize 所以属性名存在一样的问题就不足为奇了。(2)在某些场景下,Map 的 key 并非和属性名完全对应,像是通过 get set 方法“推断”出来的属性名。

2022-09-07 15:34:10 567

原创 (完整版)2022大厂Java八股文面试题库|附答案

这些面试题全部在下面这个总共485页的PDF里面,内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技术栈,每个技术以及在PDF中的对应位置都截图在下文,大家可以先进行查看。不管是面试还是跳槽,面试前的准备和集中刷题,都是尤其关键的一环,大家要严肃对待这个环节,它关乎你的薪资回报是否能符合预期。

2022-09-07 14:54:17 469

原创 Java 应该怎么学

官方群里认识了一位大佬,群里讨论的时候发现这位大佬和我住在一个地方的不同小区,然后就线下见了几次面,主要是我想向大佬学习学习,所以就不厌其烦的约大佬周末时候一起钓个鱼、吃个饭什么的。他笑了,你所崇拜的每一个人比你都辛苦,就拿我自己来说,每天晚上差不多 9 点到 10 点下班,回家后还得继续学习看书,写代码,写技术文章,一篇技术文章最少得花四五个小时来研究其底层原理。这种程序员最容易被时代抛弃,同样的业务功能,你可以写,月薪一两万的年轻人也可以写,为什么要你这个“经验资深、月薪三万多”的程序员?

2022-09-07 14:45:45 151

原创 Redis主从、哨兵、 Cluster集群一锅端!

正在上传…重新上传取消Redis主从同步包括三个阶段。第一阶段:主从库间建立连接、协商同步。第二阶段:主库把数据同步到从库,从库收到数据后,完成本地加载。第三阶段,主库把新写的命令,发送到从库。1.3.1 主从数据不一致因为主从复制是异步进行的,如果从库滞后执行,则会导致主从数据不一致。主从数据不一致一般有两个原因:如何解决主从数据不一致问题呢?1.3.2 读取过期数据Redis删除数据有这几种策略:如果使用Redis版本低于3.2,读从库时,并不会判断数据是否过期,而是会返回过期数据。而3.2 版本后,R

2022-09-06 21:08:41 362

原创 基础篇:java GC 总结,建议收藏

jvm 诞生初期所采用的垃圾回收器,单线程,独占式,适合单 CPU单线程进行垃圾回收时,必须暂停所有的工作线程,直到它回收结束。这个暂停称之为,但是 STW 会带来差的性能影响堆内存是所有线程共享的,jvm 在并发的环境进行内存分配存在同步竞争,为了加快对象的分配创建,jvm 为每个线程分配了一个私有缓存区域(在Eden空间内),这就是 Thread Local Allocation Buffer。使用TLAB可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量。

2022-09-06 20:53:19 389

原创 Java讲解之一

Java默认的线程调度算法是抢占式。即线程用完CPU之后,操作系统会根据线程优先级、线程饥饿情况等数据算出一个总的优先级并分配下一个时间片给某个线程执行。方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出。方法,会导致当前的线程等待,直到其他线程调用此对象的。,则是唤醒在此对象监视器上等待的所有线程。的个数,通常是2的N次方。

2022-09-06 20:49:30 82

原创 面试官: Redis 与 MySQL 双写一致性如何保证?

四月份的时候,有位好朋友去美团面试。他说,被问到Redis与MySQL双写一致性如何保证?这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨如何回答这个问题。

2022-09-06 20:25:39 235

原创 大厂面试来了,欢聚时代四年多经验的Java面经

整个面试过程就大概是这样了,我想对大家来说,看完文章有收获的可能是一面和二面的分享,总的来说,欢聚的技术面试难度不算很高,都是比较常规的面试考察点,我个人的话还是那句话,只要事先准备充足,还是可以从容应对的。个人体会上的话也没什么好说的,毕竟整个过程比较顺利,没什么刁钻的题,后面我还会写几篇面经介绍下我面试其他公司遇到的难题,希望能帮到各位看官少遇点坑。好了,今天就这样了,我们下期再见。

2022-09-06 20:22:29 82

原创 《Java最常见的208道面试题及答案》目录

Java 最常见的 208 道面试题》的答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。希望正在准备面试的朋友们能顺顺利利找到自己心仪的工作,加油!学习更多JAVA知识与技巧,关注与私信博主(09)学习JAVA 课件,源码,安装包,还有最新大厂面试资料等等等。好的东西要和朋友一起分享,记得将这篇目录分享给你身边正在准备面试的朋友哈~

2022-09-06 20:01:50 119

原创 Java面试中如何介绍自己的项目经验?

如果面试官感兴趣,等他问。我面试的时候,也会遇到些有准备的人,其实如果你真的想应聘的话,一定要事先准备,这点我能理解,甚至赞同,你只要别露出太明显的痕迹,我不会写上“似乎有准备,没法考察真实技能”这种话,更何况未必每个面试官都能感觉出你准备过。我的项目XX保险项目,用到SSH技术,数据库是Oracle,(这个是铺垫),开发的时候,我会先和项目经理一起设计框架,并参与了框架的构建,连接数据库的时候,我们用到了DAO,这样做的理由是,把SQL语句封装到DAO层,一旦要扩展功能模块,就可以不用做太多的改动。

2022-09-06 19:28:05 334

原创 Redis 内存淘汰机制详解

根据“八二原理“,即 80% 的请求访问了 20% 的数据,因此如果按照这个原理来配置,将 Redis 内存大小设置为数据总量的 20%,就有可能拦截到 80% 的请求。一般来说,缓存的容量是小于数据总量的,所以,当缓存数据越来越多,Redis 不可避免的会被写满,这时候就涉及到 Redis 的内存淘汰机制了。counter 值:lru 字段的后 8bit,表示数据的访问次数 使用 LFU 策略淘汰缓存时,会把访问次数最低的数据淘汰,如果访问次数相同,再根据访问的时间,将访问时间戳最小的淘汰。

2022-09-06 16:00:55 184

原创 盘点今年上半年碰到的大厂Java面试题(PDF可下载)

这些面试题全部在下面这个总共485页的PDF里面,内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技术栈,每个技术以及在PDF中的对应位置都截图在下文,大家可以先进行查看。不管是面试还是跳槽,面试前的准备和集中刷题,都是尤其关键的一环,大家要严肃对待这个环节,它关乎你的薪资回报是否能符合预期。

2022-09-06 15:05:19 164

原创 Java常用类:7000+字一次性帮你总结好啦!

内部类Object类包装类数学类时间类字符串String Builder和StringBuffer。

2022-09-05 21:49:29 54

原创 构建 Java 镜像的 10 个最佳实践

你想构建一个 Java 应用程序并在 Docker 中运行它吗?你知道在使用 Docker 构建 Java 容器有哪些最佳实践?在下面的速查表中,我将为你提供构建生产级 Java 容器的最佳实践,旨在优化和保护要投入生产环境中的 Docker 镜像。让我们从简单的 Dockerfile 开始,在构建 Java 容器时,我们经常会有如下类似的内容:这很简单,而且有效。但是,此镜像充满错误。我们不仅应该了解如何正确使用 Maven,而且还应避免像上述示例那样构建 Java 容器。下面,让我们开始逐步

2022-09-05 21:11:22 444

原创 Java 异步调用实践

为什么需要异步调用CompletableFuture 基本使用RPC 异步调用HTTP 异步调用编排 CompletableFuture 提高吞吐量。

2022-09-05 21:08:37 800

原创 对 JavaBean 的特点写法与实战心得详解

javaBean 是一个实体类,JavaBean 通过提供符合一致设计模式的公共方法向成员属性公开内部域,set 和 get 方法获取。JavaBean 是用 Java 语言编写的可重用组件。要编写 JavaBean,类必须是具体的和公共的,并且具有无参数构造函数。JavaBeans 通过提供符合一致设计模式的公共方法,并通过 set 和 get 方法获取成员属性,从而将内部域公开给成员属性。

2022-09-05 20:21:52 928

原创 Java面试题之中间件

对资源类型的管理称为粗颗粒度权限管理,即只控制到菜单、按钮、方法,粗粒度的例子比如:用户具有用户管理的权限,具有导出订单明细的权限。对资源实例的控制称为细颗粒度权限管理,即控制到数据级别的权限,比如:用户只允许修改本部门的员工信息,用户只允许导出自己创建的订单明细。很多网站登录时,允许使用第三方网站的身份来进行登录,这称为“第三方登录”。比如知乎和慕课网等,可以使用微信,QQ,或微博来进行登录。一个网站想接入第三方登录,需要用到OAuth2这个协议。

2022-09-05 17:04:16 2759

原创 10个有难度的Java面试题(含答案)

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

2022-09-05 16:24:28 159

原创 我三个月吃透这份 Java 高级工程师面试题,我已拿下 6 份意向书

就目前大环境来看,跳槽成功的难度比往年高很多。。这不马上又到了面试跳槽的黄金段,成功升职加薪,不成功饱受打击。当然也要注意,跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己的发展,偏移自己规划的轨迹),还是钱给少了,不受重视。只有考虑好了跳出去后才不会后悔2020 年的开始虽然很困难,但是困难是需要想办法克服的,而不是一直处在这一个状态,(一碗心灵鸡汤干掉,哈哈~)。

2022-09-05 15:47:40 457

原创 彻底了解线程池的原理——40行从零开始自己写线程池

在我们的日常的编程当中,并发是始终离不开的主题,而在并发多线程当中,线程池又是一个不可规避的问题。多线程可以提高我们并发程序的效率,可以让我们不去频繁的申请和释放线程,这是一个很大的花销,而在线程池当中就不需要去频繁的申请线程,他的主要原理是申请完线程之后并不中断,而是不断的去队列当中领取任务,然后执行,反复这样的操作。在本篇文章当中我们主要是介绍线程池的原理,因此我们会自己写一个非常非常简单的线程池,主要帮助大家理解线程池的核心原理!!!在我们前面提到的线程池实现的原理当中有一个非常重要的数据结构,就是。

2022-09-05 14:33:28 66

原创 Java代码性能优化的 40+ 细节

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:控制资源的使用,通过线程同步来控制资源的并发访问;控制实例的产生,以达到节约资源的目的;控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。避免随意使用静态变量。

2022-09-04 21:33:22 152

原创 2022 年阿里 Java 面试题及答案,Java 开发笔试题总结

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节。

2022-09-04 20:33:26 145

原创 Java 最常见的 200+ 面试题:面试必备

说回面试的事,这份面试清单本来是只有我们内部使用的,可到后来有很多朋友在微信上联系到我,让我帮他们找一些面试方面的资料,而且这些关系也不太好拒绝,一呢,是因为这些找我的人要么是我的朋友的弟弟妹妹,要么是我的表弟表妹们;这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。第二,你能进入哈佛,也说明你脑子不笨;

2022-09-04 20:20:43 95

原创 一道java面试题分析及思考

无意中了解到如下题目,觉得蛮好。

2022-09-04 20:08:37 53

原创 最新 Java 基础面试题及答案整理

面向对象和面向过程的区别面向过程:优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展面向对象:优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点:性能比面向过程低Java 语言有哪些特点?1. 简单易学;2. 面向对象(封装,继承,多态);

2022-09-04 20:01:13 47

原创 【设计模式】Java设计模式 -工厂模式

首先定义一个汽车抽象类/** * @Author: lyd * @Description: 产品实体 * @Date: 2022-08-21 */ public abstract class ICar { protected String name;public void pickUp() { System.out.println("提车->" + name);} }定义奔驰汽车类和红旗汽车类。并且继承基类奔驰:

2022-09-04 19:42:00 37

原创 Java面试之volatile和synchronized及Lock的区别

对声明了volatile的变量进行写操作的时候,JMM会向处理器发送一条lock的指令,会把这个变量缓存的数据写回到主内存,在多处理器的情况下,为了保证各个处理器缓存一致性的特点,对本地内存失效的数据会重新从主内存获取。共享变量存储在主内存,每个线程都有自己私有的本地内存,存储共享变量的副本,线程执行时,先把共享变量从主内存读取到线程自己的本地内存,然后再对该变量进行操作,对该变量操作完成后,再把变量刷新回主内存中。指令重排序不会影响单个线程的执行,但是会影响到线程并发执行的正确性。

2022-09-04 16:39:51 182

原创 使用nexus发布和获取依赖包

开发分布式服务, 各服务会根据命名规范定义各自的消息协议, 某一服务A调用指定服务B时, 服务A需要依赖服务B的消息协议, 使用构建工具(maven/sbt/gradle)+nexus私服可以满足多服务并行开发时, 服务间消息协议构件(artifact)最新版本的发布和获取.的仓库(命名为xxx-central), 同时把需要的远程仓库纳入其中, 目前纳入的仓库有。-- xxx-central为创建的类型为group的组仓库 -->-- 发布jar到nexus -->-- nexus仓库 -->

2022-09-04 15:04:33 936

原创 面试题:方法重载的底层原理?

关于写这篇文章,是来自于一个同学在群里抛出这么一道面试题,问执行结果是什么?输出的结果如下。​​​​​​​很明显涉及到方法重载(overload),为什么会是这个结果?要从我们开始学Java的时说起,那时老师就告诉我们两个结论。javac编译器在编译阶段会根据参数的静态类型来决定选择哪个重载版本。重载优先级,先匹配参数个数;再匹配参数类型的直接所属类;如果没有找到直接的所属类,会向上转型(包装类 -> 接口 -> 父类 );如果向上转型无果,再查找可变参数列表

2022-09-04 14:51:09 156

原创 Redis面试题(总结最全面的面试题)

什么是Redis?Redis 是一个使用 C 语言写成的,开源的高性能key-value非关系缓存数据库。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。Redis的数据都基于缓存的,所以很快,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。Redis也可以实现数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作是原子性的。Redis有哪些优缺点?

2022-09-02 21:14:58 447

原创 java解说

用于解释说明程序的文字。

2022-09-02 20:23:44 115

空空如也

空空如也

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

TA关注的人

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