精华内容
下载资源
问答
  • 多次面试亲身总结,其中多个问题被阿里,京东,腾讯多次问到;涵盖了缓存,数据库,JVM,Java基础等多方面,帮助自己更好的补齐知识短板
  • 上海-拼多多-Java高级,杭州-阿里云-Java实习生,北京-京东-Java实习生,深圳-腾讯-Java高级,杭州-蚂蚁金服-Java高级,深圳-丰巢科技,北京-百度-Java中级,04_并发编程_面试专题及答案
  • java高级工程师-面试题及答案.docx
  • java笔试题高级部分Java认证考试 该程序由 Pikulkaew Boonpeng 为 BunkerHill Community College 的 Richmond, A 教授的高级 Java 编程课程编写。 一个 100 分五部分的多项选择题考试。 该项目的环境类似于 Oracle ...
  • java_高级程序员面试试题汇总,文档中汇集了各种高级java面试题,包括解答,代码解释等,收集来源与各大电商公司的面试题集锦
  • 最常见的Java面试题及答案汇总(一)和Java高级面试题整理(附答案),值得拥有,真的值得拥有,真的值得拥有,真的值得拥有。
  • Java面试笔试题大汇总(最全+详细答案)
  • Java后端体系高级面试题,包括数据库、redis、并发编程、Spring/SpringMVC、JVM、微服务、RabbitMQ等,助您找到高薪工作!
  • java高级面试题十大总结 java高级面试题十大总结 java高级面试题十大总结 java高级面试题十大总结
  • 2019 java面试题高级

    2019-08-10 15:48:21
    高级面试题,十分详细
  • Java面试题大全(备战2021)

    千次下载 2020-12-01 22:25:02
    这本面试手册包含了Java基础、Java集合、JVM、Spring、Spring Boot、Spring Cloud、Mysql、Redis、RabbitMQ、Dubbo、Netty、分布式及架构设计等方面的技术点。内容难度参差,满足初中高级Java工程师的面试需求。
  • 2018java面试题

    2018-01-30 10:22:27
    压缩包里包含了面试过程中经常问到的知识点,还包含了同事面试时遇到的面试题,并且有详细的答案,各大框架的搭建步骤等等,面试必备~
  • 2021Java大厂面试题——大厂真题之蚂蚁金服-Java高级.pdf
  • Java高级面试题

    2017-07-21 11:01:00
    2017最新的java高级面试题,涵盖了很多高级技能介绍。
  • java笔试题中级重量盒 Web 测试盒:Selenium WebDriver 最佳实践项目。 该项目展示了 Selenium WebDriver 最佳实践; 它是一个简约的 Selenium 项目,它使 Selenium 工具易于学习和使用,并且可以完成工作。 它目前...
  • 拼多多一面 首先自我介绍 参加过哪些项目 并发编程三要素? 实现可见性的方法有哪些?...一面面试题答案: 拼多多二面 自我介绍 什么是工厂模式? 如何实现单链表的增删操作? 让我说意思JVM的分为哪几块

    拼多多一面

    首先自我介绍
    参加过哪些项目
    并发编程三要素?
    实现可见性的方法有哪些?
    多线程的价值?
    创建线程的三种方式的对比?
    画出线程的状态流转图
    常用的并发工具类有哪些?
    CyclicBarrier 和 CountDownLatch 的区别
    CAS 的问题:1、CAS 容易造成 ABA 问题2、不能保证代码块的原子性3、CAS 造成 CPU 利用率增加
    ReadWriteLock 是什么
    一面面试题答案

    拼多多二面

    自我介绍
    什么是工厂模式?
    如何实现单链表的增删操作?
    让我说意思JVM的分为哪几块?
    由于提及到了内存溢出,面试官问我内存溢出和内存泄漏的区别?
    这里问完我就去问了数据库,4大特性是啥,举个例子?
    数据的隔离级别有啥,每个隔离级别举个例子?
    分布式锁的实现知道到哪些?
    你更推荐哪一种锁?Redis的持久化操作有哪些?
    如何利用redis处理热点数据
    sleep 方法和 wait 方法有什么区别?
    synchronized 和 ReentrantLock 的区别
    线程 B 怎么知道线程 A 修改了变量
    如果你提交任务时,线程池队列已满,这时会发生什么
    线程类的构造方法、静态块是被哪个线程调用的
    二面面试题答案

    拼多多三面

    照例自我介绍和项目介绍;
    上来就让我手撕一个单例模式
    让我讲了讲代码是啥啥意思?
    由于我的项目中提及到JVM,所以给我出了一个场景题,垃圾会收器中,标记清除多次后,由于采用的是标记清除算法,那么你觉得可能会出现什么问题?
    这里提及到了full gc,问我,哪些情况会产生full GC,哪些情况产生minor GC?
    除了你项目中的内存溢出问题,你还知道哪些关于内存溢出内存泄漏的?
    然后给我出了一个动态规划的手写代码题,说来写个代码吧。
    三面面试答案

    拼多多HR面

    自我介绍一下吧
    你为什么选择拼多多?
    你最大的优点和缺点是什么
    谈谈你对公司加班的看法
    谈谈你的朋友对你的评价是什么
    平时怎么去学习的?
    你遇到的比较难应付的事情?
    你感觉做的比较成功的事情?
    想象一下你几十年后是怎样的生活?
    觉得最痛苦的一段时间
    工作节奏你觉得可以接受吗?
    你有什么想问的?

    以上就是我拼多多面试的题目 基本上我都清晰的记录了。

    总结

    我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。

    这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

    大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

    希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!

    1624222327049)]

    希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!

    领取资料只需要点击这里即可免费获取全部资料!

    展开全文
  • Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job.You.Love-人人都有好工作—IT行业求职面试必读.pdf Linux命令大全完整版.doc sql查询语句练习.doc Web服务器的工作...
  • Java高级面试题整理(附答案)

    千次阅读 2021-02-12 12:59:18
    javajava8java开发Java高级面试题整理(附答案) 这是我收集的10道高级Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战...

    java

    java8

    java开发

    Java高级面试题整理(附答案)

    CgpOIF5EAWWAQ0y_AAcB-fDz9P0878.png

    这是我收集的10道高级Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但这些问题都是容易在各种 Java 面试中被问到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。

    1. 为什么等待和通知是在 Object 类而不是 Thread 中声明的?

    一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢。Java编程的常识和深入了解有助于回答这种棘手的 Java 核心方面的面试问题。

    为什么 wait,notify 和 notifyAll 是在 Object 类中定义的而不是在 Thread 类中定义

    这是有名的 Java 面试问题,招2~4年经验的到高级 Java 开发人员面试都可能碰到。

    这个问题的好在它能反映了面试者对等待通知机制的了解, 以及他对此主题的理解是否明确。就像为什么 Java 中不支持多继承或者为什么 String 在 Java 中是 final 的问题一样,这个问题也可能有多个答案。

    为什么在 Object 类中定义 wait 和 notify 方法,每个人都能说出一些理由。 从我的面试经验来看, wait 和 nofity 仍然是大多数Java 程序员最困惑的,特别是2到3年的开发人员,如果他们要求使用 wait 和 notify, 他们会很困惑。因此,如果你去参加 Java 面试,请确保对 wait 和 notify 机制有充分的了解,并且可以轻松地使用 wait 来编写代码,并通过生产者-消费者问题或实现阻塞队列等了解通知的机制。

    为什么等待和通知需要从同步块或方法中调用, 以及 Java 中的 wait,sleep 和 yield 方法之间的差异,如果你还没有读过,你会觉得有趣。为何 wait,notify 和 notifyAll 属于 Object 类? 为什么它们不应该在 Thread 类中? 以下是我认为有意义的一些想法:

    1) wait 和 notify 不仅仅是普通方法或同步工具,更重要的是它们是 Java 中两个线程之间的通信机制。对语言设计者而言, 如果不能通过 Java 关键字(例如 synchronized)实现通信此机制,同时又要确保这个机制对每个对象可用, 那么 Object 类则是的正确声明位置。记住同步和等待通知是两个不同的领域,不要把它们看成是相同的或相关的。同步是提供互斥并确保 Java 类的线程安全,而 wait 和 notify 是两个线程之间的通信机制。

    2) 每个对象都可上锁,这是在 Object 类而不是 Thread 类中声明 wait 和 notify 的另一个原因。

    3) 在 Java 中为了进入代码的临界区,线程需要锁定并等待锁定,他们不知道哪些线程持有锁,而只是知道锁被某个线程持有, 并且他们应该等待取得锁, 而不是去了解哪个线程在同步块内,并请求它们释放锁定。

    4) Java 是基于 Hoare 的监视器的思想(http://en.wikipedia.org/wiki/...。在Java中,所有对象都有一个监视器。

    线程在监视器上等待,为执行等待,我们需要2个参数:

    一个线程

    一个监视器(任何对象)

    在 Java 设计中,线程不能被指定,它总是运行当前代码的线程。但是,我们可以指定监视器(这是我们称之为等待的对象)。这是一个很好的设计,因为如果我们可以让任何其他线程在所需的监视器上等待,这将导致“入侵”,导致在设计并发程序时会遇到困难。请记住,在 Java 中,所有在另一个线程的执行中侵入的操作都被弃用了(例如 stop 方法)。

    2. 为什么Java中不支持多重继承?

    我发现这个 Java 核心问题很难回答,因为你的答案可能不会让面试官满意,在大多数情况下,面试官正在寻找答案中的关键点,如果你提到这些关键点,面试官会很高兴。在 Java 中回答这种棘手问题的关键是准备好相关主题, 以应对后续的各种可能的问题。

    这是非常经典的问题,与为什么 String 在 Java 中是不可变的很类似; 这两个问题之间的相似之处在于它们主要是由 Java 创作者的设计决策使然。

    为什么Java不支持多重继承, 可以考虑以下两点:

    1)第一个原因是围绕钻石

    内容来源于网络,如有侵权请联系客服删除

    展开全文
  • 2021Java大厂面试题——大厂真题之拼多多-Java高级.pdf
  • java笔试题中级[未维护] 用于 Selenium-WebDriver 的 Clojure API 这是一个 Clojure 库,用于使用 Selenium-WebDriver 驱动 Web 浏览器。 您必须在项目的依赖项中明确添加所需的 Selenium-WebDriver JAR。 该库不...
  • Java高级面试题及答案

    2021-03-06 03:26:22
    BIO、NIO和AIO的区别 Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过...

    List和Set比较,各自的子类比较

    对比一:Arraylist与LinkedList的比较

    1、ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。

    2、因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。

    3、LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。

    4、因为LinkedList要移动指针,所以查询操作性能比较低。

    适用场景分析:

    当需要对数据进行对此访问的情况下选用ArrayList,当需要对数据进行多次增加删除修改时采用LinkedList。

    对比二:ArrayList与Vector的比较

    1、Vector的方法都是同步的,是线程安全的,而ArrayList的方法不是,由于线程的同步必然要影响性能。因此,ArrayList的性能比Vector好。

    2、当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样。ArrayList就有利于节约内存空间。

    3、大多数情况不使用Vector,因为性能不好,但是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性。

    4、Vector可以设置增长因子,而ArrayList不可以。

    适用场景分析:

    1、Vector是线程同步的,所以它也是线程安全的,而ArrayList是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用ArrayList效率比较高。

    2、如果集合中的元素的数目大于目前集合数组的长度时,在集合中使用数据量比较大的数据,用Vector有一定的优势。

    对比三:HashSet与TreeSet的比较

    1.TreeSet 是二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值 。

    2.HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束 。

    3.HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。

    适用场景分析:

    HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。

    HashMap和ConcurrentHashMap的区别

    1、HashMap不是线程安全的,而ConcurrentHashMap是线程安全的。

    2、ConcurrentHashMap采用锁分段技术,将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在,那么在插入元素的时候就需要先找到应该插入到哪一个片段segment,然后再在这个片段上面进行插入,而且这里还需要获取segment锁。

    3、ConcurrentHashMap让锁的粒度更精细一些,并发性能更好。

    JVM的内存结构

    根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。

    1、Java虚拟机栈:

    线程私有;每个方法在执行的时候会创建一个栈帧,存储了局部变量表,操作数栈,动态连接,方法返回地址等;每个方法从调用到执行完毕,对应一个栈帧在虚拟机栈中的入栈和出栈。

    2、堆:

    线程共享;被所有线程共享的一块内存区域,在虚拟机启动时创建,用于存放对象实例。

    3、方法区:

    线程共享;被所有线程共享的一块内存区域;用于存储已被虚拟机加载的类信息,常量,静态变量等。

    4、程序计数器:

    线程私有;是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有”的内存。

    5、本地方法栈:

    线程私有;主要为虚拟机使用到的Native方法服务。

    强引用,软引用和弱引用的区别

    强引用:

    只有这个引用被释放之后,对象才会被释放掉,只要引用存在,垃圾回收器永远不会回收,这是最常见的New出来的对象。

    软引用:

    内存溢出之前通过代码回收的引用。软引用主要用户实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据。

    弱引用:

    第二次垃圾回收时回收的引用,短时间内通过弱引用取对应的数据,可以取到,当执行过第二次垃圾回收时,将返回null。弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收的垃圾,可以通过弱引用的isEnQueued方法返回对象是否被垃圾回收器标记。

    springmvc的核心是什么,请求的流程是怎么处理的,控制反转怎么实现的

    核心:

    控制反转和面向切面

    请求处理流程:

    1、首先用户发送请求到前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;

    2、页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);

    3、前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;

    4、前端控制器再次收回控制权,将响应返回给用户。

    控制反转如何实现:

    我们每次使用spring框架都要配置xml文件,这个xml配置了bean的id和class。

    spring中默认的bean为单实例模式,通过bean的class引用反射机制可以创建这个实例。

    因此,spring框架通过反射替我们创建好了实例并且替我们维护他们。

    A需要引用B类,spring框架就会通过xml把B实例的引用传给了A的成员变量。

    BIO、NIO和AIO的区别

    Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

    Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

    Java AIO: 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

    NIO比BIO的改善之处是把一些无效的连接挡在了启动线程之前,减少了这部分资源的浪费(因为我们都知道每创建一个线程,就要为这个线程分配一定的内存空间)

    AIO比NIO的进一步改善之处是将一些暂时可能无效的请求挡在了启动线程之前,比如在NIO的处理方式中,当一个请求来的话,开启线程进行处理,但这个请求所需要的资源还没有就绪,此时必须等待后端的应用资源,这时线程就被阻塞了。

    适用场景分析:

    BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解,如之前在Apache中使用。

    NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持,如在 Nginx,Netty中使用。

    AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持,在成长中,Netty曾经使用过,后来放弃。

    为什么要用线程池

    那先要明白什么是线程池

    线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。

    使用线程池的好处

    1、线程池改进了一个应用程序的响应时间。由于线程池中的线程已经准备好且等待被分配任务,应用程序可以直接拿来使用而不用新建一个线程。

    2、线程池节省了CLR 为每个短生存周期任务创建一个完整的线程的开销并可以在任务完成后回收资源。

    3、线程池根据当前在系统中运行的进程来优化线程时间片。

    4、线程池允许我们开启多个任务而不用为每个线程设置属性。

    5、线程池允许我们为正在执行的任务的程序参数传递一个包含状态信息的对象引用。

    6、线程池可以用来解决处理一个特定请求最大线程数量限制问题。

    悲观锁和乐观锁的区别,怎么实现

    悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放。

    乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行时,可以同时进入执行,在最后更新数据的时候要检查这些数据是否被其他线程修改了(版本和执行初是否相同),没有修改则进行更新,否则放弃本次操作。

    悲观锁的实现:

    begin;/begin work;/start transaction; (三者选一就可以)

    //1.查询出商品信息

    select status from t_goods where id=1 for update;

    //2.根据商品信息生成订单

    insert into t_orders (id,goods_id) values (null,1);

    //3.修改商品status为2

    update t_goods set status=2;

    //4.提交事务

    commit;/commit work;

    乐观锁的实现:

    1.查询出商品信息

    select (status,status,version) from t_goods where id=#{id}

    2.根据商品信息生成订单

    3.修改商品status为2

    update t_goods

    set status=2,version=version+1

    where id=#{id} and version=#{version};

    什么是线程死锁?死锁如何产生?如何避免线程死锁?

    死锁的介绍:

    线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。

    死锁的产生的一些特定条件:

    1、互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放 。

    2、请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。

    3、不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用。

    4、循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。

    如何避免:

    1、加锁顺序:

    当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。当然这种方式需要你事先知道所有可能会用到的锁,然而总有些时候是无法预知的。

    2、加锁时限:

    加上一个超时时间,若一个线程没有在给定的时限内成功获得所有需要的锁,则会进行回退并释放所有已经获得的锁,然后等待一段随机的时间再重试。但是如果有非常多的线程同一时间去竞争同一批资源,就算有超时和回退机制,还是可能会导致这些线程重复地尝试但却始终得不到锁。

    3、死锁检测:

    死锁检测即每当一个线程获得了锁,会在线程和锁相关的数据结构中(map、graph等等)将其记下。除此之外,每当有线程请求锁,也需要记录在这个数据结构中。死锁检测是一个更好的死锁预防机制,它主要是针对那些不可能实现按序加锁并且锁超时也不可行的场景。

    展开全文
  • 最全华为java面试题(含答案详细讲解),面试套路,流程,技术点的宽度,广度都有基本的方向,但愿对各位有所帮助
  • java高级工程师面试题及答案解析

    万次阅读 2021-03-07 03:50:08
    面试永远是程序员迈向成功的第一个门槛,想要面试成功,各种面试题的洗礼是必不可少的,下面就来看看小编精心整理的一些java高级工程师面试题及答案吧。一、堆的年轻代和老年代怎么理解?堆的年轻代大则老年代小,GC...

    面试永远是程序员迈向成功的第一个门槛,想要面试成功,各种面试题的洗礼是必不可少的,下面就来看看小编精心整理的一些java高级工程师面试题及答案吧。

    一、堆的年轻代和老年代怎么理解?

    堆的年轻代大则老年代小,GC少,但是每次时间会比较长。年轻代小则老年代大,会缩短每次GC的时间,但是次数频繁。可以让老年代尽量缓存常用对象,JVM默认年轻代和老年代的大小比例为1:2,。观察峰值老年代内存,不影响full

    GC,加大老年代可调1:1,但是要给老年代预留三分之一的空间。减少使用全局变量和大对象 ,调整新生代,老年代到最合适。

    二、字节流与字符流的作用?

    字节流不会用到内存缓冲区,文件本身直接操作。字符流操作使用内存缓存区,用缓存存操作文件。字符流在输出前将所有内容暂时保存到内存中,即缓存区暂时存储,如果想不关闭也将字符流输出则可以使用flush方法强制刷出。字节字符转化可能存在系统编码lang,要制定编码。getbyte字节流使用更加广泛。

    三、如何唤醒一个阻塞的线程?

    如因为Sleep,wait,join等阻塞,可以使用interrupted exception异常唤醒。

    四、final在Java当中有什么作用?

    final修饰的类叫最终类,这个类不能被继承。

    final修饰的方法不可以被重写。

    final修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

    五、Java中的Math. round(-1. 5)等于多少?

    等于 -1。round()是四舍五入,注意负数5是舍的,例如:Math.round(1.5)值是2,Math.round(-1.5)值是-1。

    六、String属于基础的数据类型吗?

    String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而

    String 属于对象。

    七、Java当中操作字符串都有哪些类?它们之间有什么区别?

    操作字符串的类有:String、StringBuffer、StringBuilder。

    三者区别:

    StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder。

    String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而

    StringBuffer、StringBuilder

    存储数据的字符数组没有被final修饰,说明值可以改变,抽象类AbstractStringBuilder内部都提供了一个自动扩容机制,当发现长度不够的时候(初始默认长度是16),会自动进行扩容工作,扩展为原数组长度的2倍加2,创建一个新的数组,并将数组的数据复制到新数组,所以对于拼接字符串效率要比String要高。

    线程安全性:StringBuffer由于很多方法都被 synchronized

    修饰了所以线程安全,但是当多线程访问时,加锁和释放锁的过程很平凡,所以效率相比StringBuilder要低。StringBuilder相反执行效率高,但是线程不安全。所以单线程环境下推荐使用

    StringBuilder,多线程环境下推荐使用 StringBuffer。

    执行速度:StringBuilder > StringBuffer > String。

    八、String str="i"与 String str=new String(“i”)一样吗?

    不一样,因为内存的分配方式不一样。String str=“i"的方式,Java

    虚拟机会将其分配到常量池中,如果常量池中有"i”,就返回"i"的地址,如果没有就创建"i",然后返回"i"的地址;而 String str=new

    String(“i”) 则会被分到堆内存中新开辟一块空间。

    九、synchorized和lock的区别有哪些?

    (1)Lock是一个接口,synchronized是关键字

    (2)synchronized可以锁住类、方法和代码块,而Lock是块范围内的

    (3)Lock能够让等待锁的线程响应中断,但是synchronized不会,线程会一直等待下去

    (4)synchronized可以自动释放锁,但是Lock要手动释放锁

    (5)通过Lock能够知道线程有没有拿到锁,但是synchronized不可以

    (6)Lock可以提高多个线程读操作的效率

    十、了解kafka吗?讲一下kafka

    Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它能够处理消费者在网站中的所有动作流数据......。

    具体的可以通过以下的文章来进行了解-Kafka是什么?特性有哪些?

    十一、说说聚集索引和非聚集索引,mysql的4种事务隔离级别,InnoDB在Repeatable_Read下为什么不会幻读,索引为什么用B+树,B+树和B树的区别

    聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,非聚集索引是一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。

    以上就是关于java面试题的所有内容了,更多java面试题内容请关注奇Q工具网了解详情。

    推荐阅读:

    展开全文
  • 2021Java大厂面试题——大厂真题之商汤科技-Java高级.pdf
  • 2020年腾讯Java高级笔试面试题
  • Java高级面试题

    千次阅读 2021-03-06 21:21:13
    15)java的多态表现在哪里; 16)接口有什么用; 17)说说http,https协议; 18)tcp/ip协议簇; 19)osi五层网络协议; 20)tcp,udp区别; 21)用过哪些加密算法:对称加密,非对称加密算法; 22)说说tcp三次握手...
  • 初级Java开发工程师面试题,不需要积分(免费下载),说明:上传文件中是资源的链接,大家直接访问。同时提供了PDF版本下载方式!
  • java 架构、中高级10+份面试题和答案;精选;不断迭代增加;文档定期维护更新;附件为百度云盘下载链接.
  • 2020 兴业银行Java笔试题,记得几道题目,各位有兴趣的同学下载看看。
  • Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job.You.Love-人人都有好工作—IT行业求职面试必读.pdf Linux命令大全完整版.doc sql查询语句练习.doc Web服务器的工作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,162
精华内容 27,664
关键字:

java面试题高级

java 订阅