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 
begin
  if :new.sal < :old.sal then
    raise_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语句
end

declare @houseName varchar(20) --声明一个变量,获取存储过程传过来的值
execute proc_office 4,@houseName output --执行 存储名称 输入参数 输出参数带有output

select @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
end

declare @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 {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected 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 
    //初始化方法,创建时加载
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }
    
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    
    //调用时加载 里面对 doPost doGet 等进行处理
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }
    //销毁时加载
    @Override
    public void destroy() {

    }
}
ide
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }
    //销毁时加载
    @Override
    public void destroy() {

    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux系统——计算机网络协议,ifconfig命令

在linux系统中&#xff0c;可以在指定文件查看网卡名&#xff0c;进而使用ifconfig网卡名查询相应网络信息

Golang | Leetcode Golang题解之第113题路径总和II

题目&#xff1a; 题解&#xff1a; type pair struct {node *TreeNodeleft int }func pathSum(root *TreeNode, targetSum int) (ans [][]int) {if root nil {return}parent : map[*TreeNode]*TreeNode{}getPath : func(node *TreeNode) (path []int) {for ; node ! nil; no…

实操:serverless-step-functions-local

目录 问题 依赖组件 调用流程 代码设置 1、安装依赖插件&#xff1a; 2、serverless.yml配置&#xff0c;我这里只提供stepfunction依赖的配置 3、业务代码中使用本地stepdunction 4、启动serverless offline 5、docker 安装启动stepfunction ⚠️注意 1、docker访问…

2006NOIP普及组真题 4. 数列

线上OJ&#xff1a; 【06NOIP普及组】数列 思考&#xff1a; 这道题大概率是一道可以使用“瞪眼法”找到规律的题目。我们尝试把数据补充的更多&#xff0c;以便于寻找规律 当 k3 时&#xff0c;k的幂次为1, 3, 9, 27, 81… 从上述推理中&#xff0c;我们发现要输出的幂次和中…

MES系统的功能、架构及应用价值

MES系统生产过程控制的主要方面涵盖了生产计划与控制、生产调度与排程、数据采集与监控、质量控制与管理、物料管理与控制以及设备管理与维护等多个方面。这些功能共同构成了MES系统的核心价值&#xff0c;帮助企业实现生产过程的数字化、智能化和精细化管理。 一、工厂使用MES…

新宏观范式和产业趋势下,纷享销客如何助力企业出海?

出海&#xff0c;已不再是企业的“备胎”&#xff0c;而是必须面对的“大考”&#xff01;在这个全球化的大潮中&#xff0c;有的企业乘风破浪&#xff0c;勇攀高峰&#xff0c;也有的企业在异国他乡遭遇了“水土不服”。 面对“要么出海&#xff0c;要么出局”的抉择&#xff…

24年海南三支一扶报名流程步骤详解

一、考试时间安排&#xff1a; 报名时间&#xff1a;6月1日8:00至6月7日18:00 准考证打印时间&#xff1a;6月17日8:00 考试时间&#xff1a;6月22日 二、招聘人数 海南省计划招募390名高校毕业生 三、笔试内容&#xff1a; 笔试内容&#xff1a;综合能力和素质&#xff08;满分…

达摩院AI早癌筛查技术闪耀联合国,癌症早治时代来临?

全文预计1200字左右&#xff0c;预计阅读需要6分钟。 5月30日&#xff0c;在日内瓦举行的联合国AI大会上&#xff0c;各国的代表性企业拿出最优秀的AI成果进行分享。其中代表中国的是阿里巴巴集团的下属机构-达摩院&#xff0c;其在现场播放的一段影像&#xff0c;让在场的所有…

C++之类的三种继承修饰符(public、private、protected)总结

1、前言 前文博客介绍了修饰符public、private、protected在类中成员变量和函数访问权限限制的总结&#xff0c;主要如下&#xff1a; public&#xff08;公有&#xff09;: 公有成员在类的内部和外部都可以被访问。 private&#xff08;私有&#xff09;: 私有成员只能在类的内…

nginx隐藏版本号、错误信息页面隐藏nginx软件、修改 HTTP 头信息中的connection 字段,防止回显具体版本号、curl命令

目录 安装之后隐藏 配置文件 源代码配置安装之前隐藏 修改nginx.h文件中的 13、14行 修改 HTTP 头信息中的connection 字段&#xff0c;防止回显具体版本号 配置文件49行 错误页面程序返回版本号、nginx隐藏 配置文件36行 ​编辑 安装nginx 相关选项说明 curl命令测试…

好用的linux链接工具

工具下载链接&#xff1a; FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.3.10,更新日期2023.12.31 - FinalShell官网FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功…

mac电脑安卓设备文件传输助手:MacDroid pro 中文激活版

MacDroid Pro是一款专为Mac电脑和Android设备设计的软件&#xff0c;旨在简化两者之间的文件传输和数据管理&#xff0c;双向文件传输&#xff1a;支持从Mac电脑向Android设备传输文件&#xff0c;也可以将Android设备上的文件轻松传输到Mac电脑上。完整的文件访问和管理&#…

python的一种集成开发工具:PyCharm开发工具

一. 简介 本文简单了解两种 python语言所使用的 集成开发环境&#xff1a; PyCharm、vscode。 python语言学习中&#xff0c;可以任意选中这两个集成开发环境的一种就可以。本文先来简单学习 PyCharm开发工具安装与使用。 二. python的一种集成开发工具&#xff1a;PyChar…

智慧交通视频AI监控识别解决方案

背景分析 随着社会的进步和科技的不断发展&#xff0c;互联网技术和AI视觉分析技术日益成熟&#xff0c;为传统交通监控领域带来了新的发展机遇。AI视觉分析技术的引入&#xff0c;不仅提升了交通监控的智能化和自动化水平&#xff0c;还显著减轻了交管部门的工作负担&#xf…

wafw00f一键检测目标防火墙信息(KALI工具系列十五)

目录 1、KALI LINUX简介 2、wafw00f工具简介 3、在KALI中使用lbd 3.1 查看可检测的防火墙对象 3.2 目标防火墙种类检测 3.3 目标防火墙详细信息检测 3.4 将检查结果输出 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&#xff0c;广…

5步3分钟0基础搭建,轻松搭建《雾锁王国》私人服务器

继《幻兽帕鲁》游戏爆火之后&#xff0c;与它同类型的《雾锁王国》也是强力刷屏&#xff0c;不分伯仲&#xff0c;在 Steam 上的评分一直稳定在“特别好评”&#xff0c;让小伙伴们很“上头”。就在两者游戏玩家反响爆火的同时&#xff0c;官方服务器人数爆满&#xff0c;卡顿频…

TK防关联引流系统:全球TikTok多账号运营的神器

在TikTok的生态中&#xff0c;高效运营多个账号已成为品牌全球推广的必经之路。为此&#xff0c;TK防关联引流系统应运而生&#xff0c;它是一款专为TikTok设计的效率神器&#xff0c;助您迅速搭建并管理全球多账号矩阵。该系统由先进的“防关联智能终端”硬件和智能的“TK防关…

80个GitHub上c/c++学习项目推荐——拎几个出来写进简历

1.《30天自制C服务器》 ①语言&#xff1a;c ②来源&#xff1a;GitHub 目前star:4.8k ③项目地址&#xff1a;https://github.com/yuesong-feng/30dayMakeCppServer ④类型&#xff1a;免费 2.《btop》&#xff08;命令行资源监视器&#xff09; ①语言&#xff1a;c ②…

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

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

基础篇01——SQL的基本语法和分类

MySQL数据库安装与基本使用 安装教程参见&#xff1a;通过zip安装MySQL 通过命令行启动和停止MySQL服务命令 前提&#xff1a;安装MySQL成功之后 启动服务&#xff1a;net start mysql 停止服务&#xff1a;net stop mysql 通过命令行连接mysql 可以通过mysql的客户端命令行…