【面试题】Java核心技术三十六讲(更新中)

微信小程序推送微信服务号模板消息 微信小程序中发送微信服务号模板消息,无需用户手动确认订阅,无需绑定开放平台,无需使用UnionId。 阅读详情

Java面试者存在的问题

应聘初级、中级的Java工程师,要求扎实的Java和计算机科学基础,掌握主流框架的使用。
应聘高级Java工程师或技术专家,需要对Java IO/NIO,并发,虚拟机等,要掌握底层源码,并对分布式,安全,性能等领域有进一步的要求。

Java面试者通常存在的问题:

“知其然不知其所以然”。虽然面试者做了多年技术,开发了很多业务应用,但似乎并未思考过种种技术选择背后的逻辑。这样的话,公司并不放心把具有一定深度的任务交给他,更重要的是,并不确定他未来技术能力的成长潜力有多大。如果团队所从事的是公司核心产品,工作于基础技术领域,那么就不需要那些“差不多”或“还行”的代码,而是需要达到一定水准的高质量设计与实现。

知识碎片化,不成系统。在面试中,面试者无法完整、清晰地描述自己所开发的系统,或者使用的相关技术。平时可能埋头苦干,或者过于死磕某个实现细节,并没有抬头审视这些技术。比如,有的面试者,有一些并发编程经验,但对基本的并发类库掌握却并不扎实,似乎觉得在用的时候进行 “面向搜索引擎的编程” 就足够了。这种情况下,无法确定这个面试者有高效解决复杂问题、设计复杂系统的能力。

1. 谈谈你对Java平台的理解

"Java是解释执行"对吗?

Java有两大特性,一是“Compile Once, Run Anywhere”,跨平台能力,二是垃圾回收(GC),通过垃圾回收器回收分配内存,无需程序员操心。
日常接触的JRE包括JVM,Java类库,以及一些模块等,JDK则是JRE的超集,提供了编译器,诊断工具等。

通常,Java源代码首先通过Javac编译为字节码,然后通过JVM内嵌的解释器在运行时将其转为机器码。
但常见的JVM,比如Oracle JDK提供的Hotspot JVM,提供了JIT(Just-in-time)编译器(动态编译器),能够在运行时将热点代码编译成机器码,这种情况就属于编译执行,而非解释执行。

Java和C/C++编译的区别

Java的编译,编译Java源码生成的.class文件里的实际上是字节码,而非机器码。
在运行时,JVM通过类加载器Class-Loader加载字节码,解释或者编译执行,主流的Java版本,都是混合模式(-Xmixed)。

通常运行在 server 模式的 JVM ,会进行上万次调用以收集足够的信息进行高效的编译, client 模式这个门限是 1500 次。
Oracle Hotspot JVM 内置了两个不同的 JIT compiler , C1 对应前面说的 client 模式,适用于对于启动速度敏感的应用,比如普通 Java 桌面应用;
C2 对应 server 模式,它的优化是为长时间运行的服务器端应用设计的,默认是采用所谓的分层编译(TieredCompilation)。

Java 虚拟机启动时,可以指定不同的参数对运行模式进行选择。
指定 “-Xint” ,只进行解释执行,不对代码进行编译,这种模式抛弃了 JIT 可能带来的性能优势。毕竟解释器( interpreter )是逐条读入,逐条解释运行的。
指定 “-Xcomp” ,这是告诉 JVM 关闭解释器,不要进行解释执行,或者叫作最大优化级别。
但这未必是最高效的。 “-Xcomp” 会导致 JVM 启动变慢非常多,同时有些 JIT 编译器优化方式,比如分支预测,如果不进行 profling ,往往并不能进行有效优化。

还有一种新的编译方式,即所谓的 AOT ( Ahead-of-Time Compilation ),直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销。
比如 Oracle JDK 9 就引入了实验性的 AOT 特性,并且增加了新的 jaotc 工具。利用下面的命令把某个类或者某个模块编译成为 AOT 库。

jaotc --output libHelloWorld.so HelloWorld.class
jaotc --output libjava.base.so --module java.base

在运行时直接指定即可。

java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld

而且,Oracle JDK支持分层编译和AOT协作使用,这两者并不是二选一的关系。参考文档:http://openjdk.java.net/jeps/295。
AOT也不仅仅是只有这一种方式,业界早就有第三方工具(如 GCJ 、 Excelsior JET )提供相关功能。

另外, JVM 作为一个强大的平台,不仅仅只有 Java 语言可以运行在 JVM 上,本质上合规的字节码都可以运行,比如 Clojure 、 Scala 、 Groovy 、 JRuby 、 Jython 等大量 JVM 语言。

2. Exception和Error有什么区别?

vite打包文件如何支持files协议,支持双击即可打开网页,支持electron打包文件。 原本的所需框架为vite + element-plus项目,需要打包之后用eletron打包为桌面应用。但遇到一个问题,耗费了整整一下午时间。vite的配置也没有考虑过纯静态页面的情况。打包之后的页面只支持https协议。不断是百度以及问AI然后看vite官网文档,最后终于配置好了。这里有一个问题就是上面箭头所指位置,不支持跨域,也是es6的语法也不支持。配置完之后打包文件如下。 阅读详情

相关推荐

三大主流交易接口实战指南:XTP、CTP与数字货币API的实盘接入解析

本文深入解析了量化交易系统实现实盘交易的关键环节,聚焦于三大主流交易接口的实战接入。详细介绍了证券领域的XTP、期货领域的CTP以及数字货币交易所API的核心特性、代码封装要点与风控实践,并提供了多市场接口整合的统一架构方案,为开发者打通量化交易的“最后一公里”提供了一份接地气的实战指南。

win55的博客 1373

【总结】Java核心技术36讲知识点大纲

前段时间在极客时间上购买了杨晓峰老师的《Java核心技术36讲》,趁着这段时间有空,对相关知识点做了一个整体的目录,也对自己所掌握的Java基础进行了一个复习和梳理,若想深入学习,可以购买相关专栏,也可以对着该知识点查阅相关资料,源码等自学。—-kayfen 文末附专栏链接 Java核心技术36讲知识点总结 1 Java平台的理解 Java的特性,解释运行和编译运行 2 E...

Kaybee - 练级之路 1万+

OCTA-500:用于光学相干断层扫描血管造影研究的视网膜数据集|文献速递-基于生成模型的数据增强与疾病监测应用

数据集提供了丰富的图像和注释,包括两种模态(OCT/OCTA体积)、六种投影类型、四种文本标签(年龄/性别/眼别/疾病)以及七种分割标签(大血管/毛细血管/动脉/静脉/2D FAZ/3D FAZ/视网膜层)。我们介绍了新的 OCTA-500 数据集,该数据集包含来自 500 名受试者的 OCTA 成像,并提供了丰富的图像和标注集。(C) OCTA-500 切片的人工标注示例。图 4. OCTA-500 数据集中文本标签的统计直方图:(a) 性别,(b) 眼别,(c) 年龄,(d) 疾病。

weixin_38594676的博客 1434

教妹学Java(三十六):Java 多态的好处

看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱Java互联网工程师面试1000题。

2401_84048586的博客 905

Ollama-OCR实战:5分钟搞定PDF文档转Markdown(附qwen2.5vl模型配置)

本文详细介绍了如何利用Ollama本地部署多模态大模型qwen2.5vl,结合OCR技术,实现PDF文档到Markdown的端到端智能转换。通过解析传统OCR的局限与AI方案的优势,并提供从环境搭建、提示词工程到处理复杂表格的完整实战指南,帮助用户高效构建自动化文档处理流水线,彻底重塑文档处理工作流。

yog99的博客 604

手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)

本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。

weixin_30607029的博客 674

【JAVA】java常见面试题——持续更新

SpirngBoot自动配置就是不需要我们写代码,所有的配置都由SpringBoot自动完成。我们一般是通过这个注解来开启自动配置的,通过对包下的这个文件进行扫描,这个文件中包含了可以自动装配的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化注册到Spring容器中。SpringBoot最大特点就是他去除了各种xml配置文件改为application.yml进行统一的配置,并且按照阶梯的模式,简单明了,要使用的对象,则采取注解模式注入,省去大量代码。

别倒在黎明之前的博客 293

国内主流AI编程工具使用实例及总结

AI编程辅助工具是利用人工智能技术来帮助程序员进行软件开发的工具。它们可以在代码编写、代码审查、错误检测、代码优化等多个编程环节发挥作用,提高编程效率和代码质量。通义灵码,基于通义大模型的AI研发辅助工具,提供代码智能生成、研发智能问答、任务自主执行等能力,为开发者带来智能化研发体验,引领AI原生研发新范式。包含智能编码助手和AI程序员。

技术博客 1万+

Java基础面试题

Introduction 目录 Introduction   一, Java语言特点 二, Java的基本数据类型有哪些, 各占几个字节 三, long(8)与float(4)的取值范围谁大谁小? 四, Java语言中的字符 char可以存储一个中文汉字吗? 为什么呢? 五, 看下面的程序是否有问题,如果有问题,请指出并说明理由。 六, 请自己实现两个整数变量的交换(不需要定...

z13197919100的博客 582

[V-10]ARMv8/v9-CPU Virtualization-CPU虚拟化架构简介(vCPU/vPE)

本文简要介绍了CPU虚拟化架构的基础知识。

基层架构师的分享 1266

OpenCV-Python图形图像处理:自用的一些工具函数源代码

本文为《OpenCV-Python图形图像处理:博主自用的一些工具函数功能及调用语法介绍》内容配套函数的源代码。

老猿Python 2494

JAVA面试题分享二百三十六:结合MySQL更新流程看 undolog、redolog、binlog

关于MySQL undo log、redo log、bin log的总结就到这里了,还是跟开头说的一样,最好结合之前我写的《一条Update语句的执行过程是怎样的?》一起看,因为这几个日志就是在整个流程会用到的。细心的朋友会发现check point的圆形图很别扭,是的,一开始其实我是不知道怎么下手的,也没找到有类似弧度的东西。其实我可以从网上借个图的,但是我用两个大小圆,然后结合图层和涂改器,然后把这个呈现出来了,虽然有点丑,但是自己配出来的,哈哈!

之乎者也·的博客 1108

CPU 访问外设的两种核心机制:MMIO(Memory-Mapped I/O) 和 DMA(Direct Memory Access)

BAR和DMA是计算机系统中两种关键的数据传输机制:BAR(基址寄存器)用于CPU与设备间的控制通信,映射设备寄存器便于配置操作;而DMA(直接内存访问)允许设备直接读写系统内存,无需CPU参与大量数据传输。典型场景如NVMe SSD读取数据时,CPU通过BAR下发指令,设备通过DMA高效传输数据到主机内存,最后中断通知CPU。虽然BAR能映射大内存空间,但仍无法替代DMA的高效数据传输功能,两者各司其职——BAR负责控制,DMA专注数据传输,共同实现高性能的硬件交互。

MHD0815的博客 237

Java面试题之基础篇

Java面试题系列

m0_61035392的博客 841

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2024年150道高频Java面试题(三十六)

71. Java 中的读写锁是如何实现的?它的应用场景是什么?72. 简述 Java 中的阻塞队列和非阻塞队列的区别。

黑马非马的博客 623

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

头条五面惨败,被虐到怀疑人生!面试官三十六连击,你能答出多少?

关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。Java基础部分算法与编程数据库部分流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。

2401_84447297的博客 708

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

赶紧收藏!2024 年最常见 100道 Java 基础面试题(三十六)

1、什么是XSS攻击,如何避免? 2、什么是CSRF攻击,如何避免?

weixin_42922481的博客 929

C++面试题总结(仍在更新)

一、static的作用1.修饰局部变量:原本被放在栈区的局部变量被放在了全局区,生命周期变长。2.修饰全局变量:让变量无法被外部链接。3.修饰函数:让函数无法被外部链接。4.修饰类:5.修饰成员函数:6.修饰成员变量:二、const的作用一、在main执行前后可能执行的代码?二、结构体内存对齐问题?三、指针和引用的区别四、传递参数时的指针和引用?七、指针数组、数组指针、指针函数、函数指针八、new delete malloc free。

qq_64168613的博客 781

2021并发多线程面试题三十六计,助你成功拿offer~

一、什么是线程? 线程是操作系统能够进⾏运算调度的最⼩单位,它被包含在进程之中,是进程中的实际运作单位,可以使⽤多线程对进⾏运算提速。 二、什么是线程安全和线程不安全? 线程安全: 多线程访问时,采⽤了加锁机制,当⼀个线程访问该类的某个数据时,进⾏保护,其他线程不能进⾏访问,直到该线程读取完,其他线程才可使⽤。不会出现数据不⼀致或者数据污染。Vector 是⽤同步⽅法来实现线程安全的, ⽽和它相似的ArrayList不是线程安全的。 线程不安全: 就是不提供数据访问保护,有可能出现多个线程先后更改数据造成

Itmastergo的博客 736

【JAVA】Java学习方法,java面试题库有多少题

在这里,由于面试中MySQL问的比较多,因此也就在此以MySQL为例为大家总结分享。但是你要学习的往往不止这一点,还有一些主流框架的使用,Spring源码的学习,Mybatis源码的学习等等都是需要掌握的,我也把这些知识点都整理起来了一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

2401_84140653的博客 704

2024年前端最新Java进阶(三十六)深入理解Java的接口和抽象类_javaalarmdoor,web前端入门开发

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】从这里可以看出,抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

2401_84438067的博客 798

MySQL数据库开发的三十六条军规

点击上方“后端技术精选”,选择“置顶公众号”技术文章第一时间送达!作者:calvinlauGitHub:https://github.com/calvinlau核心军规尽量不在数据库做运...

Java笔记虾 733

Vue.js入门系列(三十六):Vue 3 的生命周期、自定义 Hook、`toRef` 与 `toRefs`、`shallowReactive` 与 `shallowRef`

toRefVue 3 生命周期是指组件在创建、挂载、更新和销毁等过程中的一系列钩子函数。在 Vue 3 中,这些生命周期钩子已经被组合式 API 替换成了更加直观的函数形式,如onMountedonUpdated等。自定义 Hook 是 Vue 3 中的一个新特性,它允许开发者将可复用的逻辑封装在一个独立的函数中。自定义 Hook 类似于 Vue 2 中的混入,但更加灵活且不易产生命名冲突。自定义 Hook 本质上就是一个函数,它返回我们想要复用的逻辑。可以将状态管理、业务逻辑等封装在自定义 Hook 中。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 2万+

【工作经验分享】,【JAVA(1),轻松入门flutter

小编综合了阿里的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!场吐槽、大厂内推、面试辅导),让我们一起学习成长!**[外链图片转存中…(img-qwDJ1yjU-1712463532030)]

jixuczy的博客 298

linux基础面试题(46个汇总),2024年最新大厂面试查案底吗

(文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如 i 节点,磁盘分布图,间接块,超级块等。linux命令’hash’管理着一个内置的哈希表,记录了已执行过的命令的完整路径, 用该命令可以打印出你所使用过的命令以及执行的次数。使用命令whatis 可以先出显示出这个命令的用法简要,比如,你可以使用whatis zcat 去查看‘zcat’的介绍以及使用简要。你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?-u 查找不包含指定类型的文件。

2401_84003656的博客 585

进阶java有哪些可以看的书籍?

读书好处 1.可以使我们增长见识. 2.可提高我们的阅读能力和写作水平. 3.可以使我们变的有修养. 4.可以使我们找到好工作. 5.可以使我们在竞争激烈的社会立于不败之地. 6.最大的好处是可以让你有属于自己的本领靠自己生存. 7.可以让自己减轻生活中的压力,平静自己的内心。 书怎么送? 1. 关注下方公众号,并分别在后台回复【抽奖】,根据提示扫描图片二维码进入小程序参与抽奖。 ...

这个时代,作为程序员可能要学习小程序 482
上一篇: 【笔记】MySQL基础及高级特性(更新中)
下一篇: 【笔记】Java基础教程学习(更新中)
Yanqiang_CS
博客等级 码龄12年 34粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值