Java面试——专业技能

优质博文:IT-BLOG-CN

在这里插入图片描述

一、简单讲下 Java 的跨平台原理


由于各个操作系统(Windows,Linux等)支持的指令集不是完全一致的。就会让我们程序在不同的操作系统上要执行不同的程序代码。Java 开发了适用于不同操作系统及位数的 Java 虚拟机来屏蔽系统之间的差异,提供统一的接口(Java API)。对于 Java 开发者而言,只需要在不同的操作系统上安装对应的 Java 虚拟机即可。这时我们的程序只需要遵循 Java 规范,就可以在所有的操作系统上运行 Java 代码。如果我们需要将系统部署到不同的环境时,只需要在系统上安装对应版本的 Java 虚拟机(JVM)即可。

二、装箱与拆箱


装箱:把基本数据类型转换成对应的包装类型(Integer i = 1:自动装箱,源码中通过 Integer.valueOf(1)方法进行装箱)。
拆箱:把包装类型转换为基本数据类型(int j = i:自动拆箱,手动拆箱:int j = i.intVaule()也是自动拆箱的源码中所使用的方法)。
为什么有了基本数据类型,还需要包装类型:因为Java是面向对象的语言,而基本数据类型不具备现象对象的特性(null等)。

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


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

四、介绍下线程池


JDK5 中增加了并发库,为 Java 线程的管理和使用提供了强大的便利性。java.util.current 包中提供了对线程的优化和管理的各项操作,该包提供了线程的运行,线程池的创建,线程声明周期的控制。
Java 通过 Executors提供四个静态方法创建四种线程池,分别是:
【1】newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需求,可灵活回收空闲线程,若无可回收,则创建新线程。
【2】newFixedThreadPool:创建一个定长线程池,可以控制最大线程并发数,超出的线程会在队列中等待。
【3】newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。
【4】newSingleThreadExecutor:创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行。
线程池(数据库连接池类似)的作用?
【1】限定线程的个数,不会导致由于线程过多导致系统运行缓慢或者崩溃。
【2】线程池不需要每次都去创建和销毁,节约资源。
【3】线程池不需要每次都去创建,提高响应时间。

五、JSP和 Servlet 有哪些相同点和不同点


Jsp 继承了 HttpServlet 所以 Jsp 是 Servlet 技术的扩展,所有的 Jsp 文件编译就是一个 Servlet,JVM 只识别 Java 的类,不能识别 Jsp 代码,Web 容器将 Jsp 的代码编译成 JVM 能够识别的 Java 类。Servlet 如果要实现 Html 功能,必须使用 Writer 输出对应的 Html 标签,比较麻烦。而 Jsp 的情况是 Java 和 Html 可以组合成一个名为 .jsp 的文件,做界面展示比较方便而嵌入逻辑比较复杂。
Jsp 与 Servlet 主要的不同点在于 Jsp 侧重于视图,Servlet 主要用于控制逻辑。Servlet 中没有内置对象,Jsp 中的内置对象必须通过 HttpServletRequst 对象、HttpServletResponse 对象以及 HttpServlet 对象得到。

六、简单介绍一下关系数据库三范式


范式就是规范,就是关系型数据库在设计表时,要遵循的三个规范。要想满足第二范式必须先满足第一范式,要满足第三范式必须先满足第二范式。
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。列数据的不可分割
第二范式(2NF)要求数据库表中的每个行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。(主键)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。(外键)
反三范式,有的时候为了效率,可以设置重复或者可以推导出的字段。例如:订单(总价)和订单项(单价)

七、Mysql 数据库的默认的最大连接数


为什么需要最大连接数?特定服务器上面的数据库只能支持一定数目同时连接,这时候我们一般都会设置最大连接数(最多同时服务多少连接)。在数据库安装时都会有一个默认的最大连接数为100。
【1】可以通过设置 my.ini 配置文件中的如下属性进行设置:

max_connections=100

【2】可以通过命令进行设置:这种方式有个问题,就是设置的最大连接数只在 Mysql 当前服务进程有效,一旦 Mysql 重启,又会恢复到初始状态。因为 Mysql 启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。

mysql>show variables like 'max_connections';(查可以看当前的最大连接数)
msyql>set global max_connections=1000;(设置最大连接数为1000,可以再次查看是否设置成功)

八、说一下 Mysql 和 Oracle 的分页


Mysql是使用关键字 limit 来进行分页的 limit offset,size 表示从多少索引去多少位。Oracle 的分页,使用三层嵌套查询。

// MySql 分页语句
String sql = "select * from students order by id limit " + pageSize*(pageNumber-1) + "," + pageSize;
// Oracle 分页语句
String sql = "select * from " +  "(select *,rownum rid from (select * from students order by postime desc) where rid<=" + pagesize*pagenumber + ") as t" + "where t>" + pageSize*(pageNumber-1);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r6YZoIlQ-1612365596544)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

九、简单讲一下数据库的触发器的使用场景


触发器语法:

CREATE [OR REPLACE] TRIGGER 触发器名称 {BEFORE|AFTER} {DELETE|INSERT|UPDATE[OF 列名]} ON 表名 [FOR EACH ROW [WHEN(条件)]] PLSQL块

触发器分类:
行级触发器: 行级触发器作用的每一条记录,都会被触发,在行级触发器上使用 :old和 :new伪记录变量识别值的状态
语句级触发器: 在指定的操作之前或者操作之后执行一次,不管这条语句影响了多少行,只执行一次。

语句实操:

-- 1、:old和:new 代表同一条记录
-- 2、:old 表示操作该行之前,这一行的值。
--    :new 表示操作改行之后,这一行的值。--创建触发器
create or replace trigger checksalary
before update
on temp
for each row 
beginif :new.sal < :old.sal thenraise_application_error("将薪");end if;
end;

十、简单讲一下数据库的存储过程的使用场景


我们可以将存储过程理解为编程中的方法,存储过程和方法一样有参数和返回值。是为了完成特定功能的SQL指令集,经编译后存储在数据库中,用户通过指定存储过程的名字并给指定参数来调用执行它。

存储过程语法:

CREATE [OR REPLACE] PROC[EDURE] 存储过程名
@参数1 [数据类型]=[默认值] [OUTPUT]
@参数2 [数据类型]=[默认值] [OUTPUT]
AS
SQL语句
EXEC 过程名[参数]

存储过程的优点:
【1】存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度。
【2】通常,复杂的业务逻辑需要多条 SQL 语句。这些语句要分别地从客户机发送到服务器,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载。
【3】存储过程创建一次便可以重复使用,从而可以减少数据库开发人员的工作量。
【4】安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。

语句实操:

--1)、带输入输出参数
create or replace procedure proc_office --存储名称
@id int,@name varchar(20) output --(参数名 参数类型 [传出值:output]
as
begin
select @name=name from db where id=@id --sql语句
enddeclare @houseName varchar(20) --声明一个变量,获取存储过程传过来的值
execute proc_office 4,@houseName output --执行 存储名称 输入参数 输出参数带有outputselect @houseName --显示值--2)、带返回值
create or replace procedure proc_office_info --存储名称
@id int
as
begin
if(select name from db where id=@id)=null --sql语句
begin
return -1
end
else
begin
return 1
end
enddeclare @houseName varchar(20) 
exec @houseName=proc_office_info 2
print @houseName

十一、简单介绍一下 Activiti


Activiti 是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速,稳定的 BPMN2流程引擎。它易于与 Spring集成使用。主要要在OA中,把线下流程放到线上。 把现实生活中一些流程固话定义到系统中,然后通过输入表单数据完成业务。例如:他可用在OA系统的流程管理中:请假流程 小于三天,一级主管审批,大于三天二级才能审批。

十二、编写一个 Servlet


【1】Servlet 与普通的 Java 程序的区别:Servlet 本质上就是一个 Java 类;Servlet 类必须实现接口 javax.servlet.Servlet 接口;运行在 Web 容器中,Tomcat 就是一个 Web 容器;能够接收浏览器发送的请求,并且做出响应给浏览器;
【2】编写 Servlet 的步骤:写一个类继承于 HttpServlet,HttpServlet 是个抽象类它已经实现了 Servlet 接口; 重写 doGet 或doPost 方法,分别处理表单的 get 或 post 请求;如果直接在浏览器输入地址访问,使用的是 get 方法;编写 web.xml 配置文件,对 Servlet 进行配置或者通过 @WebServlet(“/xxx”),才能通过浏览器来访问。

//如果web.xml中没有配置时,就添加此注解
@WebServlet("/xxx")
public class DemoServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

如果使用 web.xml 配置,配置信息如下:

<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.spring.web.servlet.DemoServlet </servlet-class><!--我的的servlet类-->
</servlet>
<servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login.do</url-pattern><!--请求连接-->
</servlet-mapping>

【3】 也可以实现最基本的 Servlet 接口。

public class servlet  implements Servlet //初始化方法,创建时加载@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}//调用时加载 里面对 doPost doGet 等进行处理@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}@Overridepublic String getServletInfo() {return null;}//销毁时加载@Overridepublic void destroy() {}
}
idepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}@Overridepublic String getServletInfo() {return null;}//销毁时加载@Overridepublic void destroy() {}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】自监督 对比学习,代码,爽学一波

from&#xff1a; https://docs.lightly.ai/self-supervised-learning/examples/simclr.html

代码随想录第22天|回溯part2 组合总和III电话号码的字母组合

216.组合总和III 当组合的数量为k就判断和&#xff0c;并且返回。 在枚举的时候可以进行剪枝&#xff0c;如果总和已经超过了n&#xff0c;那么就没必要继续递归下去了 class Solution { public:vector<int> path;vector<vector<int>> res;void backTrackin…

Java版本家政上门系统源码,自主研发、安全可控,支持任意二次开发

家政上门系统源码&#xff0c;Java版本&#xff0c;自主研发、安全可控。支持任意二次开发、有丰富合作案例。多端管理&#xff1a;管理端、用户端、服务端。 技术参数&#xff1a; 技术架构&#xff1a;springboot、mysql 、Thymeleaf 开发语言&#xff1a;java1.8、vue 开…

软件开发步骤详解

一、引言 随着信息技术的迅猛发展&#xff0c;软件已成为现代社会不可或缺的一部分。无论是企业运营、个人生活还是科学研究&#xff0c;都离不开各种软件的支持。因此&#xff0c;掌握软件开发的步骤和技巧对于IT从业者来说至关重要。本文旨在详细介绍软件开发的整个流程&…

计算机网络期末复习(1)计算机网络在信息时代对的作用 计算机网络的定义和分类 三种交换方法

计算机网络在信息时代扮演着至关重要的角色&#xff0c;它极大地改变了我们生活、工作和学习的方式。 计算机网络在信息时代的作用 信息共享与传播&#xff1a;计算机网络使全球范围内的信息快速共享成为可能&#xff0c;无论是新闻、学术研究还是娱乐内容&#xff0c;都可以…

初识 JavaScript

目录 1. 什么是 JavaScript2. JS 引入方式2.1 内部引入方式2.2 外部引入方式 3. JS 中的注释4. JS 中的结束符5. 输入和输出5.1 输出5.2 输入 6. 变量与常量6.1 变量的声明6.2 变量的赋值6.3 常量 7. JS 中的数据类型8. JS 中的类型转换8.1 隐式转换8.2 显式转换 正文开始 1. …

钣金件设计规范

(一&#xff09; 钣金 1、钣金的概念 钣金&#xff08;sheet metal&#xff09;是针对金属薄板&#xff08;厚度通常在6mm以下&#xff09;的 一种综合冷加工工艺&#xff0c;包括冲裁、折弯、拉深、成形、锻压、铆合等&#xff0c; 其显著的特征是同一零件厚度一致。 2、钣…

精通推荐算法8:Embedding表征学习 -- 总体架构

1 Embedding表征学习的总体架构 目前&#xff0c;推荐算法精排模型大多基于Embedding MLP范式&#xff0c;模型底层是Embedding层&#xff0c;作用是将高维稀疏的输入特征转换为低维稠密的特征向量&#xff0c;并实现一定的模糊查找能力。模型上层是MLP层&#xff0c;作用是对…

在鲲鹏服务器上安装nginx

华为鲲鹏服务器采用华为自研cpu ARMv8架构,提供 Windows 和多个Linux 系统 常使用 CentOS 7.6 64bit with ARM Nginx 和 Apache 一样都是一种 Web 服务器。是基于 REST 架构风格&#xff0c;以统一资源描述符URI 或者统一资源定位符URL 作为沟通依据&#xff0c;通过 HTTP 协议…

【C++进阶】深入STL之string:掌握高效字符串处理的关键

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C模板入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之string &#x1f4d2;1. STL基本…

大模型学习资料整理:如何从0到1学习大模型,搭建个人或企业RAG系统,如何评估与优化(更新中...)

通过本文您可以了解到&#xff1a; 学习&#xff1a;从小白如何入手&#xff0c;从0到1开始学习大模型。RAG系统&#xff1a;我想搭建属于自己或者企业的RAG系统&#xff0c;我该怎么去做&#xff1f;评估&#xff1a;微调后的模型或者RAG系统&#xff0c;如何评估自己的模型和…

windows配置dns访问git , 加快访问速度保姆级教程

设置 DNS 访问 Git 需要修改电脑的 DNS 配置。下面是具体的操作流程&#xff1a; 第一步&#xff1a;打开命令提示符或终端窗口 在 Windows 系统中&#xff0c;可以按下 Win R 组合键&#xff0c;然后输入 “cmd”&#xff0c;按下 Enter 键打开命令提示符窗口。在 macOS 或 …

【活动】GPT-4O:AI语言生成技术的新里程碑

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 GPT-4O&#xff1a;AI语言生成技术的新里程碑引言GPT系列简史回顾GPT-1: 初露锋…

国际荐酒师(香港)协会亮相香港国际葡萄酒和烈酒展览会

2024年5月28日至30日&#xff0c;备受瞩目的香港国际葡萄酒和烈酒展览会VINEXPO Hong Kong在香港盛大举办。作为亚太区最盛大的葡萄酒展会&#xff0c;本届展会不仅吸引了全球葡萄酒和烈酒行业的目光&#xff0c;更见证了国际荐酒师&#xff08;香港&#xff09;协会&#xff0…

(2) qml诞生的原因 和Qt Creator开发环境的介绍

文章目录 qml诞生原因Qt Quick应⽤程序Qt Creator环境1、MSVC2、MinGWMSVC的优缺点MinGW的优缺点 最后的选择延伸阅读 一些常用的快捷键统一格式化代码统一qml 语言的格式Locator 定位器帮助 qml诞生原因 可以在Qt5中开发的不同类型的经典应⽤程序。桌⾯应⽤程 序正在发⽣着改…

GIS结合物联网:塑造智慧地球的新篇章

在信息技术飞速发展的今天&#xff0c;地理信息系统&#xff08;GIS&#xff09;与物联网&#xff08;IoT&#xff09;的深度融合&#xff0c;正以前所未有的方式重塑着我们对世界的认知。本文将深入探讨GIS与物联网结合的原理、应用实践以及面临的挑战与未来展望&#xff0c;共…

乡村振兴与乡村旅游品牌化:打造具有地方特色的乡村旅游品牌,提升乡村旅游吸引力,促进美丽乡村建设

目录 一、引言 二、乡村旅游品牌化的重要性 &#xff08;一&#xff09;增强乡村旅游的辨识度 &#xff08;二&#xff09;提升乡村旅游的附加值 &#xff08;三&#xff09;促进乡村文化的传承与创新 三、打造具有地方特色的乡村旅游品牌 &#xff08;一&#xff09;明…

Linux实验报告(二)——Linux系统中的常用命令

目录 一、实验名称&#xff1a; 二、仪器、设备&#xff1a; 三、参考资料&#xff1a; 四、实验目的&#xff1a; 五、实验内容&#xff08;步骤&#xff09;&#xff1a; 六、实验数据&#xff08;程序&#xff09;记录&#xff1a; ​编辑 ​编辑 七、实验结果分析…

公司网站模板制作

公司网站模板的制作是一项极其重要的工作&#xff0c;因为网站模板决定了网站的整体风格和用户体验。一个漂亮、易用的网站模板将会吸引更多的用户&#xff0c;而一个糟糕的网站模板则会让用户不供选择。下面就让我们介绍一下公司网站模板的制作。 首先&#xff0c;一个好的网站…

前端 CSS 经典:mac docker 效果

前言&#xff1a;浏览器上实现 mac docker 效果&#xff0c;实现思路&#xff0c;1. 布局&#xff0c;方框间距用元素代替&#xff0c;因为有放大缩小功能&#xff0c;不用元素的话&#xff0c;不好控制。2. 定义个 css 变量 i&#xff0c;用来代表放大比例。3. 确定每个元素的…