![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA面试题
garagong
腾讯大数据、人工智能解决方案架构师、原京东集团云计算架构师,从事能源行业信息化工作长达17年,擅长云计算、大数据、AI大模型等技术培训、结合业务场景编写落地方案。
展开
-
字节码(java bytecode)在JAVA中的概念及作用
字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。通常情况下它是已经经过编译,但与特定机器码无关。字节码通常不像源码一样可以让人阅读,而是编码后的数值常量、引用、指令等构成的序列。 字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。字节码的实现...原创 2018-06-29 14:03:01 · 7313 阅读 · 0 评论 -
分布式消息队列(联网架构核心中间件)之研讨
本次分享是结合网络上现有的资料和自己的一点感想,进行总结,按照下面六方面进行详细阐述:消息、消息协议、消息队列概述 消息队列应用场景 消息中间件示例 JMS消息服务 常用消息队列 总结一、消息、消息协议、消息队列概述 消息即是信息的载体。为了让消息发送者和消息接收者都能够明白消息所承载的信息(消息发送者需要知道如何构造消息;消息接收者需要知道如何解析...原创 2018-08-06 09:23:46 · 1290 阅读 · 0 评论 -
JVM虚拟机相关概念及调优
JVM虚拟机是JAVA跨平台运行的最基础的组件,理解JVM虚拟机对于操作JAVA应用程序的性能监控、性能分析、性能调优都有很大帮助,下面根据JAVA数据类型、堆、栈、引用类型、GC算法等,全面理解JVM的原理、工作机制以及虚拟机参数,结合实际情况(硬件、操作系统),通过JVM参数进行调优,实现JVM最优性能。 1、数据类型 java虚拟机中,数据类型可以分为两类:基本类型...原创 2018-08-10 16:15:57 · 540 阅读 · 0 评论 -
NIO、BIO和AIO的概念
NIO、BIO、AIO分别是同步阻塞、同步非阻塞、异步非阻塞,分别从客户端与服务端之间网络通信中是否为连接、请求提供线程,首先介绍一下同步、异步、阻塞 与非阻塞的概念,再介绍NIO、BIO、AIO的具体概念。 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Jav...原创 2018-08-06 16:47:25 · 548 阅读 · 0 评论 -
Netty概念、特性以及应用场景
netty是异步的 事件驱动的基于NIO实现的开源框架,用以快速轻松的实现高性能、高可靠性的网络客户端和服务器端最基础的通信组件,通俗的讲:Netty是Jboss开发做的JAR包,很好的封装了Socket,处理网络通信的一个开源通信框架。一、Netty的特性1)设计统一的API,适用于不同的协议(阻塞和非阻塞)基于灵活、可扩展的事件驱动模型高度可定制的线程模型...原创 2018-08-06 18:43:36 · 7486 阅读 · 0 评论 -
Thumbnailator图片处理工具
前言作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情。现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的都是高清图片,分辨率也是相当的高,当然占用的存储空间也就大了。问题也就产生了,你每个用户都上传个3M的图片怎么办?但是显然现在硬盘的存放空间是不值钱的,1T、2T随便来,存放是能用钱解决的问题。但是网速太值钱了,用户如果天天加载你的网页加...原创 2018-08-02 14:47:14 · 1989 阅读 · 0 评论 -
在JAVA编程语言中,volatile、synchronized和lock对同步机制的理解
1、概述在研究并发程序时,我们需要了解java中关键字volatile和synchronized关键字的使用以及lock类的用法。首先,了解下java的内存模型:(1)每个线程都有自己的本地内存空间(java栈中的帧)。线程执行时,先把变量从内存读到线程自己的本地内存空间,然后对变量进行操作。 (2)对该变量操作完成后,在某个时间再把变量刷新回主内存。那么我们再了解下锁提供的...原创 2018-08-13 11:33:27 · 582 阅读 · 0 评论 -
深入理解进程、线程、线程池的区别和联系
我们在学习JAVA或者面试过程中,往往会碰到进程、 线程、线程池的之间的错综关系,下面我结合网上的资料和自己的理解,总结了三者的关系,从以下几个方面说起:1、进程、线程、线程池的概念 进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程,而线程,是运行中的实际的任务执行者。可以说,进程中包含了多个可以同时运行的线程。 ...原创 2018-08-13 15:03:29 · 11068 阅读 · 0 评论 -
HTTP1.0、1.1、2.0主要区别
1、HTTP1.0与HTTP1.1主要区别长连接 HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接,这样减少创建连接的开销,提高了效率。 HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可...原创 2018-08-20 16:42:02 · 1264 阅读 · 0 评论 -
TCP/IP 四层模型与OSI模型区别与联系
1、TCP/IP四层模型:1.链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡2.网络层(互联网层):处理分组在网络中的活动,比如分组的选路。3.运输层:主要为两台主机上的应用提供端到端的通信。4.应用层:负责处理特定的应用程序细节。 假设在一个局域网(LAN)如以太网中有两台主机,二者运行FTP协议:网络层与运输层...原创 2018-08-21 10:48:10 · 15634 阅读 · 0 评论 -
CAP理论个人见解
CAP理论在1998年首次被提出,1999年被发表为文章,2000年Brewer在PODC大会演说时将CAP作为假设,2002年才被证明为定理。CAP定理属于理论计算机科学中的内容。一个分布式系统最多只能同时满足 一致性(Consistency),可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。解读CAP的定义如下:...原创 2018-07-25 17:08:51 · 445 阅读 · 0 评论 -
Mysql四种常用存储引擎
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平、特性等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎,MySQL常用的四种引擎的介绍(1)InnoDB存储引擎* InnoDB是事务型数据库的首选引擎,支...原创 2018-07-25 13:57:40 · 340 阅读 · 0 评论 -
JVM中类加载机制如何运转的?
概述本文是我在学习jvm类加载机制的时候对网上的一些资料的整理和总结,后文会给出具体的参考地址。这里参考了很多的资料,从中总结了一个大致的流程并且丰富了很多概念细节的解释。关于 JVM类加载机制我准备分两篇文章来分别介绍,一片主要介绍jvm中类的生命周期,另一篇着重讲一下类加载器。单独讲解类加载器是因为 类加载这部分是唯一我们可以通过自己的代码程序进行干预的部分,而其他部分都是jvm内部直接完成的...原创 2018-06-29 14:37:41 · 149 阅读 · 0 评论 -
OSGI就用来做什么以及三层框架
OSGi(Open Service Gateway Initiative) 通过OSGI,可以进行模块化管理,模块之间真正的解藕,能实现硬件的“热插拔”功能。能够更加规范项目化管理(不同开发人员可以单独做自己模块的开发,不需要考虑其它模块的开发情况),现时也可以手动停止或启用某一模块,避免了WEB应用程序全部启动,无法今年部分功能的缺陷,从而提高系统性能。OSGi框架规范中定义了框架的正确行...原创 2018-07-03 14:59:32 · 1482 阅读 · 0 评论 -
String.class.getClassLoader().loadClass() 与Class.forName()的区别
为什么要把ClassLoader.loadClass(String name)和Class.forName(String name)进行比较呢,因为他们都能在运行时对任意一个类,都能够知道该类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。在比较它俩之前需先了解一下java类装载的过程java类装载过程分为3步: 1:加载 Jvm把class文件字节...原创 2018-07-03 15:23:14 · 3033 阅读 · 1 评论 -
JAVA中hashCode()与equals()区别与作用
在JAVA语言中,判断两个对象是否相等,一般有两种方法,一种是hashcode(),另一种是equals(),这两个方法在判断准确性和效率上有很大的区别,下面章节详细说明: hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? 因为重...原创 2018-06-29 09:53:51 · 4788 阅读 · 4 评论 -
HTTPS是如何工作的
加密算法简介正文开始之前,我先来解释简单的解释下对称加密和非对称加密.对称加密采用对称密码编码技术,也就是编码和解码采用相同描述字符,即加密和解密使用相同的密钥,实现这种加密技术的算法称对称加密算法。对称加密使用简单,密钥较短,加密和解密过程较快,耗时短,常见的对称加密算法有DES,3DES,lDEA,AES,RC4等。非对称加密与对称加密不同,其加密算法需要两个密钥:公开密钥(pu...原创 2018-07-24 15:29:45 · 453 阅读 · 0 评论 -
Redis与Memchache的主要区别
Redis与Memchache都是非常优秀的分布式缓存系统,且性能都足够卓越。 Memchache出现的较早,应用的比较方法,客户较多; Redis比Memchache出现晚一些,由于Redis 卓越的性能以及弥补Memchache的一些缺陷,有超过Memchache的趋势,但是两者目前都有自己的优势。下面主要从以下几个方面说明一下区别与联系;1、数据存储介质: Memc...原创 2018-07-24 15:50:00 · 2562 阅读 · 0 评论 -
Mysql常用的命令
为了便于工作中查询Mysql的常用命令,现把常用的一些命令记录下来供自己使用,也能够共享个小伙伴使用,Mysql常用命令行如下:一、mysql服务的启动和停止net stop mysqlnet start mysql二、登陆mysql语法如下: mysql -u用户名 -p用户密码键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然...原创 2018-07-25 09:58:29 · 137 阅读 · 0 评论 -
堆排序原理
堆的概念在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿。堆是一棵顺序存储的完全二叉树。其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。其中每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。举例来说,对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足下列关系之一时,称之为堆:(1) Ri <= R2i+1 且 Ri...原创 2018-09-12 09:30:15 · 410 阅读 · 0 评论