JAVA面试基础(总结了很多)

最近帮整理了一份JAVA的面试基础,不过很基础后面还回继续更新。

java的专业技能

2.1 java的基础部分

2.1.1 简单讲一下java的跨平台原理

      由于各操作系统(windows,liunx等)支持的指令集,不是完全一致的。就会让我们的程序在不同的操作系统上要执行不同程序代码。Java开发了适用于不同操作系统及位数的java虚拟机来屏蔽个系统之间的差异,提供统一的接口。对于我们java开发者而言,你只需要在不同的系统上安装对应的不同java虚拟机、这时你的java程序只要遵循java规范,就可以在所有的操作系统上面运行java程序了。

Java通过不同的系统、不同版本、不同位数的java虚拟机(jvm),来屏蔽不同的系统指令集差异而对外体统统一的接口(java API),对于我们普通的java开发者而言,只需要按照接口开发即可。如果我系统需要部署到不同的环境时,只需在系统上面按照对应版本的虚拟机即可。

搭建一个java开发环境的步骤

Java开发环境需要些什么?

适用于我们开发环境的jdk

对应开发环境eclipse

还需要web服务器(tomcat)

下载对应组件

安装

Jdk,安装正常流程安装即可,配置我们的JAVA_HOME,因为后面的eclispe和tomcat会依赖于这个变量.

Eclispe正常解压就ok,设置workspace的默认编码

Tomcat 正常解压就ok,把tomcat集成到eclispe中,安装插件就OK。

.......

Svn/git

2.1.3讲一下java中int数据占几个字节

Java中有几种基本数据类型?8种

Int占 4个字节,32位

Boolean 1位

2.1.4 面向对象的特征有哪些方面

有四大基本特征:封装、抽象、继承、多态

      面向对象的封装性,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。

张三这个人,他的姓名等属性,要有自己提供的获取或改变的方法来操作。private name setName getName

      抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。 就是把现实生活中的对象,抽象为类。

在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。遗产继承

多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

Object obj = new xxx();

UserDao userDao = new UserDaoJdbcImpl();

UserDao userDao = new UserDaoHibernateImpl();

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

原则:回答比较抽象问题的时候,要举例说明

2.1.5有了基本数据类型,为什么还需要包装类型?

基本数据类型,java中提供了8中基本的数据类型。boolean int float等

包装类型:每一个基本的数据类型都会一一对应一个包装类型。

boolean ----->Boolean

Int -------->Integer

装箱和拆箱

装箱:把基本的数据类型转换成对应的包装类型.

Integer .valueOf(1)

Integer i = 1;自动装箱,实际上在编译时会调用Integer .valueOf方法来装箱

拆箱:就是把包装类型转换为基本数据类型.基本数据类型 名称 = 对应的包装类型。

Integer i = 1;

int j = i;//自动拆箱//int j = i=intValue();手动拆箱

自动拆箱:实际上会在编译调用intValue

Java是一个面向对象的语言,而基本的数据类型,不具备面向对象的特性。

null Integer--->null int---->0 用Integer和int分别表示Person这个类的ID

Max 最大值

min 最小值

缓存值:对象缓存,Integer i=1; integer j= 1;i ==j

2.1.6、说一下"=="和equals方法究竟有什么区别?

非常经典的一个面试题?先说清楚一个,再来说另一个?

==用来判断两个变量之间的的值是否相等。变量就可以分为基本数据类型变量,引用类型。

如果是基本数据类型的变量直接比较值而引用类型要比较对应的引用的内存的首地址。

equals 用来比较两个对象长得是否一样。判断两个对象的某些特征是否一样。实际上就是调用对象的equals方法进行比较。

总结:(1)、基础类型比较  :使用==比较值是否相等。

(2)、引用类型比较

①重写了equals方法,比如String。

第一种情况:使用==比较的是String的引用是否指向了同一块内存

第二种情况:使用equals比较的是String的引用的对象内用是否相等。

②没有重写equals方法,比如User等自定义类

==和equals比较的都是引用是否指向了同一块内存。

2.1.7讲一下String和StringBuilder的区别(final)?StringBuffer和StringBuilder的区别?

1.在java中提供三个类String StringBuillder StringBuffer来表示和操作字符串。字符串就是多个字符的集合。

String是内容不可变的字符串。String底层使用了一个不可变的字符数组(final char[])

String str =new String(“bbbb”);

而StringBuillder StringBuffer,是内容可以改变的字符串。StringBuillder StringBuffer底层使用的可变的字符数组(没有使用final来修饰)

2.最经典就是拼接字符串。

String进行拼接.String c = “a”+”b”;

StringBuilder或者StringBuffer

StringBuilder sb = new StringBuilder(); sb.apend(“a”).apend(“b”)

拼接字符串不能使用String进行拼接,要使用StringBuilder或者StringBuffer

3.StringBuilder是线程不安全的,效率较高.而StringBuffer是线程安全的,效率较低。

2.1.8、讲一下java中的集合?

Java中的集合分为value,key--vale(Conllection Map)两种。

存储值有分为List 和Set.

List是有序的,可以重复的。

Set是无序的,不可以重复的。根据equals和hashcode判断,也就是如果

一个对象要存储在Set中,必须重写equals和hashCode方法。

存储key-value的为map.

ArrayList和LinkedList的区别?

  List常用的ArrayList和LinkedList。区别和使用场景?

  ArrayList底层使用时数组。LinkedList使用的是链表。

  数组查询具有所有查询特定元素比较快。而插入和删除和修改比较慢(数组在内存中是一块连续的内存,如果插入或删除是需要移动内存)。

  链表不要求内存是连续的,在当前元素中存放下一个或上一个元素的地址。查询时需要从头部开始,一个一个的找。所以查询效率低。插入时不需要移动内存,只需改变引用指向即可。所以插入或者删除的效率高。

ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList使用在查询比较少而插入和删除比较多的情况。

2.1.9讲一下HashMap哈HashTable的区别?HashTable和ConcurrentHashMap的区别?

相同点:HashMap和HasheTalbe都可以使用来存储key--value的数据。

区别:

HashMap是可以把null作为key或者value的,而HashTable是不可以的。

HashMap是线程不安全的,效率较高。而HashTalbe是线程安全的,效率较低。

?我想线程安全但是我又想效率高?

ConcurrentHashMap通过把整个Map分为N个Segment(类似HashTable),可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。

 

2.1.10、实现一个拷贝文件的工具类使用字节流还是字符流?

我们拷贝的文件不确定是只包含字符流,有可以能有字节流(图片、声音、图像等),为考虑到通用性,要使用字节流。

讲一下线程的几种实现方式?启动方式?区分方式?

①实现方式

通过继承Thread类实现一个线程

通过实现Runnable接口实现一个线程

  继承扩展性不强,java总只支持单继承,如果一个类继承Thread就不能继承其他的类了。

②怎么启动?

  Thread thread = new Thread(继承了Thread的对象/实现了Runnable的对象)

  thread.setName(“设置一个线程名称”);

  thread.start();

  启动线程使用start方法,而启动了以后执行的是run方法。

③怎么区分线程?在一个系统中有很多线程,每个线程都会打印日志,我想区分是哪个线程打印的怎么办?

  thread.setName(“设置一个线程名称”); 这是一种规范,在创建线程完成后,都需要设置名称。

2.1.12有没有使用过线程并发库?

简单了解过?

JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性。 java.util.concurrent包中提供了对线程优化、管理的各项操作,使得线程的使用变得的心应手。该包提供了线程的运行,线程池的创建,线程生命周期的控制.concurrent

Java通过Executors提供四个静态方法创建四种线程池,分别为:

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

2.1.13线程池的作用?

限定线程的个数,不会导致由于线程过多导致系统运行缓慢或崩溃

线程池不需要每次都去创建或销毁,节约了资源、

线程池不需要每次都去创建,响应时间更快。

连接池也是一样?

2.1.14讲一下什么是设计模式?常用的设计模式有哪些?

设计模式就是经过前人无数次的实践总结出的,设计过程中可以反复使用的、可以解决特定问题的设计方法。

单例(饱汉模式、饥汉模式)

构造方法私有化,让出了自己类中能创建外其他地方都不能创建

2、在自己的类中创建一个单实例(饱汉模式是一出来就创建创建单实例,而饥汉模式需要的时候才创建)

3、提供一个方法获取该实例对象(创建时需要进行方法同步)

工厂模式:Spring IOC就是使用了工厂模式.

      对象的创建交给一个工厂去创建。

代理模式:Spring AOP就是使用的动态代理。



喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/34678.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的社区医院管理系统(代码+论文)

🎉博主介绍:Java领域优质创作者,阿里云博客专家,计算机毕设实战导师。专注Java项目实战、毕设定制/协助 📢主要服务内容:选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 💖精彩专栏…

linux下使用gdb运行程序,查看程序崩溃原因

1.什么是gdb? gdb 是 GNU Debugger 的缩写,是一个功能强大的用于调试程序的开源调试器工具。它可以帮助开发人员诊断和解决程序中的错误、跟踪程序执行过程、查看变量的值等。gdb 支持多种编程语言,包括 C、C、Objective-C、Fortran 等,并可…

代发考试战报:12月近几日通过,题库已经更新至12月5号

代发考试战报:12月近几日通过,题库已经更新至12月5号,考试大约会遇到几个新题,就算遇到的新题全错,也不影响考试通过,HCIA-PM 12月2号上海通过,售前L3 H19-435 HCSP-Storage 存储 上海通过&…

使用Kubernetes部署MySQL+WordPress

目录 前提条件 部署MySQL和WordPress 编写yaml文件 应用yaml文件 存在问题及解决方案 创建PV(持久化卷) 创建一个PVC(持久化卷声明) 部署添加PVC 查看PV对应的主机存储 删除资源 查看资源 删除deployment和service 查看主机数据 删除PVC和PV 删除主机数据 前提条…

深入解析 Nginx:基础介绍到原理分析及案例实践

引言 Nginx(“Engine-X”)是一个高性能的 HTTP 和反向代理服务器,广泛应用于 Web 服务、负载均衡、API 网关、反向代理、静态资源服务器等多种场景。由于其高效的性能、低资源消耗和灵活的配置,Nginx 成为众多互联网公司、企业以…

Apache HTTPD多后缀解析漏洞

进入靶场 上来就是一个文件上传的功能 经过尝试,发现只有jpg,png,gif文件能上传上去,而题目又说了,这个是Apache的中间件,Apache文件解析漏洞涉及到一个Apache解析文件的特性,Apache默认一个文…

JavaScript(二)

1.JavaScript 操作符 2.JavaScript 流程控制 3.JavaScript 循环 4.JavaScript 字符串方法 5.JavaScript 数组方法 知识点一 操作符 变量声明 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Ti…

单链表---合并两个链表

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 struct ListNode {int val;struct ListNode* next; }; w 方法一---不使用哨兵位 我们创建一个新链表用于合并两个升序链表&#xff0c; 将两个链表中最小的结点依次尾插到…

2024-12月akamai_2.0-sensor-data之cookie反爬分析详细教程(上)

目录 一、网址及目标数据二、分析接口反爬点&#xff08;akamai执行过程&#xff09;三、逆向分析参数sensor_data四、扣js算法代码加密详细步骤 一、网址及目标数据 文章原文 1、网站&#xff1a; https://www.dhl.com/cn-zh/home/tracking/tracking-supply-chain.html?sub…

【Docker】如何在Docker中配置防火墙规则?

Docker本身并不直接管理防火墙规则&#xff1b;它依赖于主机系统的防火墙设置。不过&#xff0c;Docker在启动容器时会自动配置一些iptables规则来管理容器网络流量。如果你需要更细粒度地控制进出容器的流量&#xff0c;你需要在主机系统上配置防火墙规则。以下是如何在Linux主…

煤矿 35kV 变电站 3 套巡检机器人 “上岗”,力破供电瓶颈

近日&#xff0c;杭州旗晟智能科技与甘肃某变电站配电室的三套智能巡检机器人线下测试顺利完成&#xff0c;并成功交付使用&#xff0c;这为电力运维工作注入了全新的活力与强大的技术支撑。 一、项目背景 甘肃某变电站总建筑面积1098平方米的变电站集变电、配电、监控等多功能…

[创业之路-170]:《BLM战略规划》- 领导力 - 战略制定 - 洞察力 (战略能力中最最核心的能力) - 市场洞察 -2- 看客户-B2B客户分析

目录 一、看客户概述 一、看客户的核心意义 二、看客户的具体内容 三、看客户的实践方法 四、看客户的重要性 二、2B客户的研究方法&#xff1a;研究客户的决策流程 2.1 客户的战略&#xff1a;财务、市场、运营组织 1、研究客户的决策流程 2、研究客户的战略 3、研究…

langgraph 多智能体 Multi-agent supervisor

1. 工具定义 1.1网络搜索工具 from typing import Annotated import os from langchain_community.tools.tavily_search import TavilySearchResults from langchain_core.tools import tool from langchain_experimental.utilities import PythonREPLos.environ["TAVIL…

前缀和(七) 连续数组中最长的01个数相等序列

525. 连续数组 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组&#xff0c;并返回该子数组的长度。 示例 1: 输入: nums [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 示例 2: 输入: nums [0,1,0] 输出: 2 说明: [0, 1] (或…

【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 64QAM调制解调系统的设计 2.2 信号解调 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.算法仿真效果 本文是之前写的文章: 《基于FPGA的64QAM基带通信系统,包含testbench,高斯…

BUUCTF:misc刷题记录2(会持续更新的)

乌镇峰会种图 打开之后什么也没有发现 用010找到flag flag{97314e7864a8f62627b26f3f998c37f1} wireshark 解压后是个压缩包&#xff0c;用wirshark打开。 根据题目信息&#xff0c;我们可以在wirshark中去寻找密码 在这里进行过滤http.request.methodPOST 在这里的ffb7567a1…

elasticSearch(一):elasticSearch介绍

一、搜索引擎 搜索引擎的核心目的是帮助用户以最小的成本才海量数据中找到最想要的结果。糟糕的搜索引擎往往会所问非所答&#xff0c;用户查了半天也得不到自己想要的&#xff0c;好的搜索引擎往往第一页就是用户最想要的结果。而目前判断搜索引擎好坏一般是从召回率、精确率…

python解析各城市历史天气数据

1 背景介绍 python解析各城市历史天气数据 2 基本思路 获取原始数据&#xff0c;解析&#xff0c;然后保存到excel表格里面。 以浙江省杭州市西湖区2016年9月到2017年4月的 历史天气数据为例&#xff0c;最终成果如下&#xff1a; 3 核心代码 对于数据比较少时&#xff…

【并集查询】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

组件中的生命周期

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了Flutter中如何使用三方包相关的内容,本章回中将介绍Widget的生命周期.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 本章回中介绍的生命周期是指Widget从创建到结果的整个过程,这里提到的Widget是一个泛…