java面试
文章平均质量分 68
低调使人进步
不要总是看到了希望才去坚持,很多时候是坚持了才会看到希望!!!
展开
-
搞懂分布式技术1:分布式系统的一些基本概念
该系列博文会告诉你什么是分布式系统,这对后端工程师来说是很重要的一门学问,我们会逐步了解常见的分布式技术、以及一些较为常见的分布式系统概念,同时也需要进一步了解zookeeper、分布式事务、分布式锁、负载均衡等技术,以便让你更完整地了解分布式技术的具体实战方法,为真正应用分布式技术做好准备。如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。本文较为粗略地讲述了CAP与BASE理论,以及分布式系统需要解决的一些问题,更加转载 2021-07-08 15:37:32 · 779 阅读 · 0 评论 -
JUD并发编程篇
内容太大,懒得搬,给几个详细的文章地址文章1:https://blog.csdn.net/qq_44155967/article/details/106368483文章2:https://www.cnblogs.com/ghoster/p/7475132.html文章3:https://www.cnblogs.com/franson-2016/p/5554671.html原创 2021-07-08 15:12:43 · 116 阅读 · 0 评论 -
分别用Thread、Runnable、Callable实现线程
CallableCallable和Runnable一样,但是Callable可以有返回值,可以捕获异常。 方法不同,run()。public class test { /** * @Developer 大都督 * @date 2020/5/6 20:57 * **/ public static void main(String[] args) throws ExecutionException, InterruptedExcep原创 2021-07-08 10:49:27 · 133 阅读 · 0 评论 -
什么是CAS机制?
原文太长了 懒得搬 面试用的,原文链接,挺详细的:https://blog.csdn.net/qq_32998153/article/details/79529704转载 2021-07-08 10:15:51 · 74 阅读 · 0 评论 -
Java8新特性之函数式接口---面试
从Java8开始引入了函数式接口,其说明比较简单:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 java8引入@FunctionalInterface 注解声明该接口是一个函数式接口。1、语法定义/** * 定义函数式接口 * 接口上标注@FunctionalInterface 注解 */@FunctionalInterfacepublic interface ICollectionService { /**转载 2021-07-02 17:22:59 · 493 阅读 · 0 评论 -
为什么建议使用你LocalDateTime,而不是Date?
为什么需要LocalDate、LocalTime、LocalDateTimeDate如果不格式化,打印出的日期可读性差Tue Sep 10 09:34:04 CST 2019使用SimpleDateFormat对时间进行格式化,但SimpleDateFormat是线程不安全的 SimpleDateFormat的format方法最终调用代码:private StringBuffer format(Date date, StringBuffer toAppendTo,转载 2021-07-02 16:38:56 · 104 阅读 · 0 评论 -
java中多个子类实现了父类的同一个抽象方法,那么我调用该抽象方法时如何确定走哪一个子类的同名方法呢
上一篇说了java中多个子类实现同一个接口,怎么区分调的是哪一个实现类java中多个子类实现了父类的同一个抽象方法,那么我调用该抽象方法时如何确定走哪一个子类的同名方法呢?答:抽象类无法实例化,实例化的只能是子类。如Father是一个抽象父类,有一个talk抽象方法,和一个speak的普通方法。Son,Son2是他的子类,有一个talk方法的具体实现。那么可以Father f =new Son();这里不能new Father,抽象类无法实例化,而f.talk();调用的是Son的t原创 2021-07-02 11:44:51 · 5261 阅读 · 4 评论 -
Spring的注解@Qualifier用法
在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢?根据注入资源的注解不同实现的方式有一点小小的区别下面上铺垫图##在Controller中使用 @Autowired注入时Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义@Service注解的名称之一。##使用@Resource注入时使用@..转载 2021-07-02 11:39:25 · 137 阅读 · 0 评论 -
事务的四种隔离级别和七种传播机制----面试
事务的四种隔离级别和七种传播机制:链接文章:https://blog.csdn.net/qq_2300688967/article/details/85220087MySQL8.0 查看默认事务的隔离级别,并模拟测试链接文章:https://blog.csdn.net/qq_39455116/article/details/86238033...原创 2021-06-28 16:46:49 · 176 阅读 · 0 评论 -
java动态代理---面试
代理模式:代理模式在Java中特别常见,如spring AOP功能就是用代理来实现的。代理模式作用是:在不修改被代理对象功能的基础上,通过对代理类进行扩展,进行一些功能上的附加与增强。一般使用代理模式我们需要先定义一个接口,静态代理只是一种简单的java代码功能扩展。而动态代理利用了反射机制,使用更简单,但背后逻辑…先说明一点,动态代理代理的是接口,而不是类,Proxy类产生的代理对象是Proxy的一个实例,这个实例实现了我们定义的接口一、静态代理面向接口的编程,代理类与真实类继承自同一个接口(原创 2021-06-28 10:28:01 · 851 阅读 · 0 评论 -
Redis分布式锁的正确实现方式(Java版)
分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁可靠性首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间原创 2021-06-25 17:25:09 · 440 阅读 · 0 评论 -
XML解析——Java中XML的四种解析方式
XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。 XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。 针对以下XML文件,会对四种方式进行详细描述:<?xml version="1.0转载 2021-06-25 16:15:15 · 3804 阅读 · 2 评论 -
什么是跨域及怎么解决跨域问题?
什么是跨域?这篇博文解释的挺清楚,我直接引用https://blog.csdn.net/lambert310/article/details/51683775跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。不明白没关系,举个栗子:http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)http:/.转载 2021-06-25 14:54:25 · 411 阅读 · 0 评论 -
Java虚拟机--内存结构
1.JVM是什么? JVM:Java Virtual Mechinal(Java虚拟机).它是一个虚构的计算机,是通过在实际的计算机上模拟各种功能来实现的。JVM的主要工作是解释自己的指令集(字节码,如java源码编译成class文件在虚拟机上运行)并映射到本地的CPU指令集或OS的系统调用。Java语言跨平台的本质就是不同的操作系统使用不同的JVM映射规则,使其与操作系统无关,从而实现跨平台。2.JVM的内存结构是什么样子? Java虚拟机在运行Java程序的时候,会把它所管理的内存划分为若干转载 2021-06-25 11:06:03 · 177 阅读 · 0 评论 -
Map的四种遍历方式及详解
1. Map的四种遍历方式下面只是简单介绍各种遍历示例(以HashMap为例),各自优劣会在本文后面进行分析给出结论。(1) for each map.entrySet()Java12345MapString, String> map = new HashMapString, String>();for (EntryString, Str原创 2017-12-05 11:19:51 · 20373 阅读 · 0 评论 -
VIM常用快捷键
一、移动光标h,j,k,l 上,下,左,右ctrl-e 移动页面ctrl-f 上翻一页ctrl-b 下翻一页ctrl-u 上翻半页ctrl-d 下翻半页w 跳到下一个字首,按标点或单词分割W 跳到下一个字首,长跳,如end-of-line被认为是一个字e 跳到下一个字尾E 跳到下一个字尾,长跳b 跳到上一个字B 跳到上一个字,长跳0 跳至行首,不管有无缩进,就是跳到第0...原创 2019-06-20 17:33:42 · 143 阅读 · 0 评论 -
简单实现多线程线程安全(简单易懂)
直接看代码:背景:模仿多线程抢票package com.example.institution01.instiServic;import java.util.ArrayList;import java.util.List;public class ThreadTest { /**总票数**/ static int a = 1; public static void...原创 2019-09-18 16:31:56 · 173 阅读 · 0 评论 -
Redis分布式锁的总结和使用
什么是分布式锁及正确使用redis实现分布式锁:https://www.cnblogs.com/cmyxn/p/9047848.htmlRedis分布式锁的正确实现方式:https://www.cnblogs.com/linjiqin/p/8003838.html使用Redis作为分布式锁的一些注意点:https://www.cnblogs.com/gxyandwmm/p/95...原创 2019-09-18 18:39:32 · 159 阅读 · 0 评论 -
浅谈HashMap 的底层原理
HashMap 是一个用于存储Key-Value 键值对的集合,每一个键值对也叫做Entry。这些个Entry 分散存储在一个数组当中,这个数组就是HashMap 的主干。HashMap 数组每一个元素的初始值都是Null。1. Put 方法的原理调用Put方法的时候发生了什么呢?比如调用 hashMap.put("apple", 0) ,插入一个Key为“apple"的元素。这时候我们...转载 2019-11-06 16:43:19 · 117 阅读 · 0 评论 -
mysql表的联合主键
mysql表的联合主键是由表的多列字段值的拼接成的主键,来形成唯一性。和以往单个列的普通主键如id(自增长)的区别一个字段主键和多个字段的区别。如果一个表有id,name,sex三个字段,那普通主键表的主键为id值区分唯一性。联合主键为id+name值来区别唯一性,或id+name+sex拼接的值来区分唯一性。联合主键的设置:1....原创 2019-09-20 18:21:31 · 3405 阅读 · 0 评论 -
TCP和UDP的优缺点及区别
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接...转载 2019-10-16 17:37:01 · 359 阅读 · 0 评论 -
Java中的ThreadLocal详解
一、ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。 ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一乐Threa转载 2021-05-15 10:35:56 · 195 阅读 · 0 评论 -
MyBatis 一级缓存、二级缓存全详解
什么是缓存缓存就是内存中的一个对象,用于对数据库查询结果的保存,用于减少与数据库的交互次数从而降低数据库的压力,进而提高响应速度。什么是MyBatis中的缓存MyBatis 中的缓存就是说 MyBatis 在执行一次SQL查询或者SQL更新之后,这条SQL语句并不会消失,而是被MyBatis 缓存起来,当再次执行相同SQL语句的时候,就会直接从缓存中进行提取,而不是再次执行SQL命令。MyBatis中的缓存分为一级缓存和二级缓存,一级缓存又被称为 SqlSession 级别的缓存,二级...转载 2021-06-16 18:23:46 · 229 阅读 · 0 评论 -
Integer和int 面试题
最近在招聘⾯试的过程中,考察⼀些候选⼈的基础掌握能⼒中发现,还是有大多数有了有1~3年的开发者在基础这块⼉掌握的不够牢靠,没有去思考过为什么这样做,以及这样做的原因是什么?那么今天我们就来聊聊Java中的Integer和int,以及他们在⾯试中⼀般会如何考候选⼈呢?⾸先我们来看如下的⼀些⾯试连环炮:开发中你在定义常量的时候,⼀般是⽤的Integer还是int,他们之间有什么区别?什么叫包装类,它是如何包装基本类型的?Integer的⾃动装箱和⾃动拆箱的原理是什么?以及所发⽣在哪个阶段?带来的好处转载 2021-06-17 10:16:06 · 412 阅读 · 0 评论 -
字符串常量池在哪里
字符串常量池在哪里在分析字符串常量池的位置时,首先了解一下堆、栈、方法区: 堆 存储的是对象,每个对象都包含一个与之对应的class JVM只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定 栈 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象) 每个栈中的数据(原始类型和对象引用)都...转载 2021-06-17 15:05:55 · 6252 阅读 · 5 评论 -
RocketMQ实现分布式事务原理---面试
之前讲过有关分布式事务2PC、3PC、TCC的理论知识,博客地址:1、分布式事务(1)---2PC和3PC原理2、分布式事务(2)---TCC原理一、举个分布式事务场景转载 2021-06-18 18:44:58 · 182 阅读 · 0 评论 -
Mysql锁机制--乐观锁 & 悲观锁如何实现
悲观锁:关闭自动提交:set autocommit = 0;转载 2021-06-21 10:23:48 · 668 阅读 · 0 评论 -
Redis等缓存数据库为什么访问会比较快?
首先,我们知道,mysql是持久化存储,存放在磁盘里面,检索的话,会涉及到一定的IO,为了解决这个瓶颈,于是出现了缓存,比如现在用的最多的 memcached(简称mc)。首先,用户访问mc,如果未命中,就去访问mysql,之后像内存和硬盘一样,把数据复制到mc一部分redis和mc都是缓存,并且都是驻留在内存中运行的,这大大提升了高数据量web访问的访问速度。然而mc只是提供了简单的数据结构,比如 string存储;redis却提供了大量的数据结构,比如string、list、set、hashse..转载 2021-06-24 10:56:23 · 448 阅读 · 0 评论 -
Object中的方法
protected Objectclone()创建并返回此对象的一个副本。booleanequals(Object obj)指示其他某个对象是否与此对象“相等”。protectedvoidfinalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。Class<?>getClass()返回此 Object 的运行时类。inth...转载 2019-06-16 12:18:58 · 78 阅读 · 0 评论 -
java开发3~5年工作经验面试题
关于java基础String,StringBuilder,StringBuffer区别是什么?底层数据结构是什么?分别是如何实现的? HashSet的底层实现是什么?它与HashMap有什么关系? Java 的并发包里面有那些知识点? HashCode与HashMap的关系? 哈希函数的理解? map在put()的做了哪些事? 如果发生hash碰撞,有什么方法可以解决? 各种类型...转载 2019-06-16 12:00:47 · 1670 阅读 · 0 评论