面试题
文章平均质量分 66
awesome_go
这个作者很懒,什么都没留下…
展开
-
int 和 Integer有什么区别,Integer 有哪些函数方法
【基本数据类型对象包装类JDk1.5以后的新特性】——【自动拆箱,装箱】简化书写。Integer i = new Integer(5);基本数据类型对象包装类,对象创建的简化写法Integer i = 5;1. Integer i = 5;(其实在内存中也是通过 new Integer(5)这种方式创建的!)这种方式成为——自动装箱,Integer.valueOf(5)自动完成了对象创建的动作。2. 在进行 i = i + 5,运算时——= 右边的i 会先转成基本数据值(自动拆箱)i.int原创 2021-05-18 00:03:26 · 1562 阅读 · 0 评论 -
Spring-aop 全面解析(从应用到原理)
Spring-aop 全面解析(从应用到原理)写了很多篇文章了,但写的文章大家都反映平平(但我却感觉是自己的呕心沥血之作),是时候改变一下写作技巧了,希望能通过一种愉快的方式使大家学到最多的知识。以前写的文章直接上源码分析,这会让不了解的人看着很累,得不到想要的效果。本篇文章则从背景-原理-使用-源码的顺序为大家解析。如果不希望深入了解,看到“使用”这个层次就足够了。希望大家能愉快地看完这篇文章,多少给点反馈呗一、AOPAOP 产生的背景“存在即合理”,任何一种理论或技术的产生,必然有它的原创 2020-09-15 11:02:28 · 459 阅读 · 1 评论 -
java 并行化 处理-2
1.前言想必热爱游戏的同学小时候,都幻想过要是自己要是能像鸣人那样会多重影分身之术,就能一边打游戏一边上课了,可惜漫画就是漫画,现实中并没有这个技术,你要么只有老老实实的上课,要么就只有逃课去打游戏了。虽然在现实中我们无法实现多重影分身这样的技术,但是我们可以在计算机世界中实现我们这样的愿望。2.计算机中的分身术计算机中的分身术不是天生就有了。在1971年,1971年,英特尔推出的全球第一颗通用型微处理器4004,由2300个晶体管构成。当时,公司的联合创始人之一戈登摩尔就提出大名鼎鼎的“摩尔定原创 2020-09-08 11:35:31 · 733 阅读 · 0 评论 -
spring 怎么实现并行化 查询代码
让我们先看个图, Taobao的PDP(Product Detail Page)页.打开Chrome Network面板, 让我们来看taobao是怎么加载这个页面数据的. 根据经验, 一般是异步加载的, 要么是XHR,要么就是js(jsonp), 你应该很快可以找到还能看到这个接口的性能神奇的是, taobao竟然在一次请求中拉下了整个PDP页的完整数据, 而且服务端处理耗时不到125ms首先, 这么做有什么好处?前后端开发对接简单 在...原创 2020-09-08 10:53:53 · 634 阅读 · 0 评论 -
java8 Stream 使用教程
为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk原创 2020-06-12 14:21:55 · 1384 阅读 · 0 评论 -
Arthas watch 命令
Arthas watch 命令使用指南阿里巴巴云原生小助手2020-06-1085浏览量简介:Arthas 是我很喜欢的一款 Java 领域的开发调试工具。每次测试遇到问题的时候,当别人为了加一条日志而重发代码,我都会欣慰地拿出我的 Arthas 并且告诉他们:少年,你不用再为了加日志就重发代码而烦恼了。Arthas,你值得拥有。作者 | AgentdArthas watch 命令使用指南Arthas 是我很喜欢的一款 Java 领域的开发调试工具。每次测试遇到问题的时候,当别...原创 2020-06-11 17:29:34 · 1506 阅读 · 0 评论 -
BeanFactory和ApplicationContext的区别
BeanFactory:是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;ApplicationContext:应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;1) 国际化(MessageSource)2) 访问资源,如URL和文件(ResourceLoader)3) 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层 4) 消息发送、..原创 2020-06-02 19:33:48 · 215 阅读 · 0 评论 -
讲讲springboot自动配置原理
讲讲springboot自动配置原理讲讲springboot自动配置原理上图是springboot自动配置大致流程图,我们都知道springboot框架使用起来非常方便,我们只要引入相关组件的maven包,然后配置少量的配置就可以正常使用了,不用像以前那样配置繁杂的xml配置文件。自动配置jar包这个是springboot自动配置的核心jar包,里面包含了所有的组件自动配置类,例如:RedisAutoConfiguration.java、WebMvcAutoConfigurat.原创 2020-05-23 14:48:22 · 340 阅读 · 0 评论 -
技术知识图谱
SpringSpring框架的七大模块Spring Core:框架的最基础部分,提供 IoC 容器,对 bean 进行管理。Spring Context:继承BeanFactory,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化等功能。Spring DAO:提供了JDBC的抽象层,还提供了声明性事务管理方法。Spring ORM:提供了JPA、JDO、Hibernate、MyBatis 等ORM映射层.Spring AOP:集成了所有AOP功能Spring Web:提供原创 2020-05-19 17:29:41 · 643 阅读 · 0 评论 -
Java 内存泄漏与内存溢出详解
内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态。内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出。内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,...原创 2020-03-24 16:41:33 · 2174 阅读 · 0 评论 -
单一索引和复合索引区别
单一索引和复合索引区别及联系 - BABY的日志 - 网易博客 http://selectgoodboy.blog.163.com/blog/static/1032120612015191117118/什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结。一.概念单一索引是指索引列为一列的情况,即新建索引的语句只实...原创 2020-03-20 17:53:55 · 5938 阅读 · 0 评论 -
char varchar text mysql 数据结构的区别
它们的存储方式和数据的检索方式都不一样。数据的检索效率是:char > varchar > text空间占用方面,就要具体情况具体分析了。1.char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字符,都要占去10个字符的空间(自动用空格填充),且在检索的时候后面的空格会隐藏...原创 2020-03-19 17:11:02 · 503 阅读 · 0 评论 -
mysql 加锁的过程
一、背景MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的...原创 2020-03-16 09:18:41 · 490 阅读 · 0 评论 -
mysql 高并发update导致死锁的 情况
死锁产生的条件:出现循环等待资源。update对锁的流程:当sql发出一个update请求之后,数据库会对表中的每条记录加上U锁。然后数据库会根据where条件,将符合条件的记录转换为X锁。对不满足条件的记录释放U锁。环境模拟1. 创建数据库环境--创建数据库 create database DeadLockTest;--创建数据表 (没有主键) use ...原创 2020-03-13 17:27:48 · 7796 阅读 · 0 评论 -
ConcurrentHashMap 实现源码
以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。我们...原创 2020-03-12 18:06:13 · 133 阅读 · 0 评论 -
ConcurrentHashMap 原理分析
了解ConcurrentHashMap 实现原理,建议首先了解下HashMap实现原理。HashMap 源码解析(JDK1.8)为什么要用ConcurrentHashMapHashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都锁...原创 2020-03-12 17:18:05 · 151 阅读 · 0 评论 -
HashMap 原理
HashMap是由数组加链表的结合体。如下图:Paste_Image.png图中可以看出HashMap底层就是一个数组结构,每个数组中又存储着链表(链表的引用)JDK1.6实现hashmap的方式是采用位桶(数组)+链表的方式,即散列链表方式。JDK1.8则是采用位桶+链表/红黑树的方式,即当某个位桶的链表长度达到某个阈值(8)的时候,这个链表就转化成红黑树,这样大大减少了查...原创 2020-03-12 16:35:09 · 247 阅读 · 1 评论 -
CAS 原理介绍
概述CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。案例介绍CAS之前,我们先来看一个例子。/** * @author joonwhee * @date 2019/7/6 */public class Volatile...原创 2020-03-12 10:34:44 · 308 阅读 · 0 评论 -
AQS 原理以及 AQS 同步组件总结
一 面试中关于 synchronized 关键字的 5 连击1.1 说一说自己对于 synchronized 关键字的了解synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(moni...原创 2020-03-11 22:01:16 · 399 阅读 · 0 评论 -
Java CAS 原理剖析
在Java并发中,我们最初接触的应该就是synchronized关键字了,但是synchronized属于重量级锁,很多时候会引起性能问题,volatile也是个不错的选择,但是volatile不能保证原子性,只能在某些场合下使用。像synchronized这种独占锁属于悲观锁,它是在假设一定会发生冲突的,那么加锁恰好有用,除此之外,还有乐观锁,乐观锁的含义就是假设没有发生冲突,那么我正...原创 2020-03-11 16:55:04 · 148 阅读 · 0 评论 -
细粒度锁的实现
最近在工作上碰见了一些高并发的场景需要加锁来保证业务逻辑的正确性,并且要求加锁后性能不能受到太大的影响。初步的想法是通过数据的时间戳,id等关键字来加锁,从而保证不同类型数据处理的并发性。而java自身api提供的锁粒度太大,很难同时满足这些需求,于是自己动手写了几个简单的扩展... 1. 分段锁 借鉴concurrentHashMap的分段思想,先生成一定数量的锁,...原创 2020-03-11 16:25:23 · 691 阅读 · 0 评论 -
分布式 事务的几种实现方案
背景四月初,去面试了本市的一家之前在做办公室无人货架的公司,虽然他们现在在面临着转型,但是对于我这种想从传统企业往互联网行业走的孩子来说,还是比较有吸引力的。在面试过程中就提到了分布式事务问题。我又一次在没有好好整理的问题上吃了亏,记录一下,还是长记性!!!先看面试过程面试官先是在纸上先画了这样一张图:让我看这张图按照上面的流程走,有没有什么问题?面试官并没有直接说出来这里面...原创 2020-01-08 17:57:38 · 468 阅读 · 0 评论 -
线程池的使用
【线程池简述】线程池中,当需要使用线程时,会从线程池中获取一个空闲线程,线程完成工作时,不会直接关闭线程,而是将这个线程退回到池子,方便其它人使用。简而言之,使用线程池后,原来创建线程变成了从线程池获得空闲线程,关闭线程变成了向池子归还线程。【线程池带来的好处】1.降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的性能消耗。2.提高响应速度,当任务到达时,任务...原创 2020-01-03 23:13:16 · 514 阅读 · 0 评论 -
使用过那些设计模式
前言在【Java设计模式】系列中,LZ写了十几篇关于设计模式的文章,大致是关于每种设计模式的作用、写法、优缺点、应用场景。随着LZ自身的成长,再加上在工作中会从事一定的架构以及底层代码设计的原因,在近半年的实践中,对于设计模式的理解又有了新的认识,因此有了此文,目的是和网友朋友们分享自己对于设计模式的一些思考。LZ本人水平有限,抛砖引玉,写得不对的地方希望网友朋友们指正,也可留言相互讨论。...原创 2020-01-03 22:54:58 · 1549 阅读 · 0 评论 -
java保证线程安全的两种方式
JVM有主内存(Main Memory)和工作内存(Working Memory),主内存就是平时所说的java堆内存,存放程序中所有的类实例、静态数据等变量,是线程共享的,而工作内存中存放的是从主内存中拷贝过来的变量以及访问方法所取得的局部变量,是每个线程独立所有的,其他线程不能访问。每个线程都有自己的执行空间(即工作内存),线程执行的时候用到某变量,首先要将变量从主内存拷贝的自己的工作内存...原创 2020-01-03 20:22:33 · 590 阅读 · 0 评论 -
JAVA多线程实现方式主要有三种
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一...原创 2020-01-03 18:03:57 · 175 阅读 · 0 评论 -
mysql有哪几种索引?各自的区别是什么?各自的原理是什么?
Mysql目前主要有以下几种索引方式:FULLTEXT,HASH,BTREE,RTREE。那么,这几种索引有什么功能和性能上的不同呢?FULLTEXT即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。值得一提的是,在数据量较大...原创 2019-12-14 11:18:20 · 3043 阅读 · 0 评论 -
jvm 面试题1
什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。Java内存结构?转存失败重新...原创 2019-12-10 09:38:19 · 127 阅读 · 0 评论 -
深入理解单例模式——只有一个实例
文章目录前言一 单例模式简介1.1 定义1.2 为什么要用单例模式呢?1.3 为什么不使用全局变量确保一个类只有一个实例呢?二 单例的模式的实现2.1 饿汉方式(线程安全)2.2 懒汉式(非线程安全和synchronized关键字线程安全版本 )2.3 懒汉式(双重检查加锁版本)2.4 懒汉式(登记式/静态内部类方式)2.5 饿汉式(枚举方式)2.6 总结公众号前言初...原创 2019-11-04 20:06:30 · 620 阅读 · 0 评论 -
rabbitmq 实现延时队列的 方式
延迟队列存储的对象是对应的延迟消息,所谓"延迟消息"是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费 。延迟队列的使用场景有很多,比如:令在订单系统中, 一个用户下单之后通常有 3 0 分钟的时间进行支付,如果 30 分钟之内没有支付成功,那么这个订单将进行异常处理,这时就可以使用延迟队列来处理这些订单了 。~用户希望通过手机远程遥控...原创 2019-10-18 17:44:22 · 336 阅读 · 0 评论 -
处理mysql 主从数据库延迟 3
一 序言在运维MySQL数据库时,DBA会接收到比较多关于主备延时的报警:check_ins_slave_lag (err_cnt:1)critical-slavelag on ins:3306=39438相信 slave 延迟是MySQL dba 遇到的一个老生长谈的问题了。我们先来分析一下slave延迟带来的风险异常情况下,主从HA无法切换。HA 软件需要检查数据的一致性,...原创 2019-10-16 20:31:25 · 1349 阅读 · 0 评论 -
mysql 解决主从延迟的方发二
今儿打算给大家分享的是如何解决MySQL主从延迟的问题,这个也是一些同学在生产中面临的比较棘手的问题, 经常给我打电话或者微信,说张老师,现在监控主从之间的延迟特别大。怎么办啊?!有什么办法可以避免延迟嘛?!面对抛出这样的问题,我们先来了解下生产中有哪些主从架构?线上生产环境一般有一主一从,一主多从,多主一丛(级联复制,MySQL5.7之后才有) ,主主复制。主从架构存在目的就...原创 2019-10-16 20:15:00 · 143 阅读 · 0 评论 -
mysql 解决主从同步方法一
MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器。相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢?1. MySQL数据...原创 2019-10-16 19:59:14 · 235 阅读 · 0 评论 -
mysql 怎么解决幻读的问题
一、什么是幻读在一次事务里面,多次查询之后,结果集的个数不一致的情况叫做幻读。而多出来或者少的哪一行被叫做 幻行二、为什么要解决幻读在高并发数据库系统中,需要保证事务与事务之间的隔离性,还有事务本身的一致性。三、MySQL 是如何解决幻读的如果你看到了这篇文章,那么我会默认你了解了 脏读 、不可重复读与可重复读。1. 多版本并发控制(MVCC)(快照读)多数数据库都...原创 2019-10-15 17:50:05 · 1038 阅读 · 2 评论 -
mybatis if test非空判断数字0为什么是false
今天工作中发现一个Long类型的参数没有传到sql中去,在sql xml配置文件中是使用if test标签判断:<if test="version != null and version != ''">xxxxx</if>通过debug发现参数中的version是有值的,但出来的sql语句就没有这个version网上查了一些有不少同样这样的问题,大致解决...原创 2019-10-14 16:46:27 · 1413 阅读 · 0 评论 -
如何实现延时触发/定时器
问题微信公众平台后台有一个功能即定时群发消息,如明晚的20:00群发一条图文消息。那么这种延时触发的逻辑如何实现呢?方案一每隔一定的时间扫描所有超时的事件这是最容易想到的一种方案。此方案最关键的两点是轮训的频率以及如何高效地获取超时任务。如果可以允许一秒左右的误差,每隔一秒轮训一次即可。 采用红黑树或者最小堆存储触发任务,按照触发时间戳排序。如此,每次扫描能够很快地获取超时的...原创 2019-09-17 12:09:34 · 3064 阅读 · 0 评论 -
rabbitmq实现向各服务广播消息
广播fanout主要是将一个消息,分发到绑定了它的队列上,而这些队列如消费者自己去建立和绑定!对生产者是解耦的生产者不需要关心消费者有多少,消费者如果需要这种消息,只需要把队列绑定到exchange上即可流程打开rabbitmq的ui 建立两个队列fanout1,fanout2 打开exchange里的amqp.fanout类型 绑定上面的两个队列 向exchange里...原创 2019-09-17 16:37:04 · 548 阅读 · 0 评论 -
rabbitmq实现向各服务广播消息
广播fanout主要是将一个消息,分发到绑定了它的队列上,而这些队列如消费者自己去建立和绑定!对生产者是解耦的生产者不需要关心消费者有多少,消费者如果需要这种消息,只需要把队列绑定到exchange上即可流程打开rabbitmq的ui 建立两个队列fanout1,fanout2 打开exchange里的amqp.fanout类型 绑定上面的两个队列 向exchange里...原创 2019-09-17 16:37:37 · 680 阅读 · 0 评论 -
MySQL InnoDB四个事务级别 与 脏读、不重复读、幻读
MySQL InnoDB事务隔离级别脏读、可重复读、幻读希望通过本文,可以加深读者对ySQL InnoDB的四个事务隔离级别,以及脏读、不重复读、幻读的理解。MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ)。·未提交读(READUNCOMMITTED)。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这...原创 2019-09-17 19:36:16 · 448 阅读 · 0 评论 -
Java8中的Stream,让集合操作酸爽起来
简介java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date API等特性还是有必要去了解一下。比如在项目中经常用到集合,遍历集合可以试下lambda表达式,经常还要对集合进行过滤和排序,Stream就派上用场了。用习惯了,不得不说真的很好用。Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合...原创 2019-09-18 09:28:42 · 99 阅读 · 0 评论