知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

java面试题

发表时间:2022-03-24来源:网络

JAVA基础

1、JDK和JRE有什么区别?

    JRE:java运行时环境,包含java虚拟机、java基础类库

    JDK:java开发工具包,它包含了JRE,编译器和其他工具

    如果需要运行java程序,只需要安装JRE就可以了。

    如果需要编写java程序,需要安装JDK。

    JAVA_HOME------>JDK安装目录。

2、==和equals的区别是什么?

    ==比较的是地址

    equals比较的是两个对象的内容

3、两个对象的hashCode()相同,则equals()也一定为true对吗?

    是相同,因为equals()比较的是两个对象的内容,hashCode相同说明值相同。

4、final在java中有什么作用?

    final可以修饰类,这样的类不能被继承,比如String类

    final可以修饰方法,这样的方法不能被重写

    final可以修饰变量,这样的变量的值不能被修改

5、java中的Math.round(-1.5)等于多少?

    -1

    Math.round()的返回值类型是long

    Math.round(11.5f),那么它的返回值类型是int,取值向正无穷方向取舍

    Math.round(11.5) -->  12

    Math.round(-11.5) -->  -11

    Math.round(0.5) -->  1

    Math.round(-0.5) -->  0

6、String属于基础的数据类型吗?

    String是引用类型

    8个基础的数据类型有:byte、shrot、int、long、Boolean、double、float、char

7、基本类型与引用类型的区别:

    基本类型只表示简单的字符或数字

    引用类型可以是复杂的数据结构

8、java中操作字符串有哪些类?它们有什么区别?

    String:

    一旦被创建,就不能修改它的值

    适用于少量的字符串操作的情况

    StringBuffer:

    StringBuffer是线程安全

    StringBuilder:

    StringBuilder是线程不安全的

    运行速度比StringBuffer快

9、String str = "i" 与 String str = new String(i)一样吗?

    不一样

    String str ="i"先去内存中找是否存在“i”这个字符串,若存在,则将地址引用,不存在则创建。

    String str = new String(i),不管事先是否存在“i”每次都会创建其新的对象

10、如何将字符串反转?

    调用StringBuffer类中的reverse方法

    String str =“abc”;

    StringBuffer sb = new StringBuffer(str)

    System.out.printIn(sb.reverse());

    通过charAt(int index) 返回char值进行字符串拼接

    String str = "abc";

    String reverse = "" ;

    for(int i = 0; i  函数--->模块化--->封装--->代码复用

create function  函数名([参数列表]) returns  数据类型

begin

    SQL语句;

    return  值;

end;

示例:

最简单的仅有一条sql函数

create function  myfunction() returns  999;

调用

select     myfunction();

带传参的函数

create function  myfunction(name vrchar(15))    returns  int

begin

    return   (select  id  from table_name  where  colume_name  =  name);

end;

调用

sleect  myfunction(“admin”);

2、存储过程

存储过程-------> 一组为了完成特定功能的sql语句集

IN传入参数

delimiter //

create procedure  mysql(

    IN id  int 

)

begin

    select * from table_name where di = id;

end;

//

delimiter;

其中in是传进去的变量;

drop procedure  mysql;//销毁这个存储过程

调用存储过程

call   mysql(5);

out 输出参数

delimiter //

create procedure  demo 

(in   id1   int,  OUT  ids  int )

begin 

    select id into ids  ffrom users  where  id =  id1;

end

//

delimiter;

调用

set  @result;

call   demo(1,@result);

INOUT输入输出

delmiter//

create  procedure  demo (inout  ids  int)

begin

    select  id into  ids   from users  where  id  =dis;

    select ids ;

end 

//

delimiter;

调用

set  @result1  =2;

call demo(@result1);

3、视图

--视图就是一条select 语句 执行后返回结果集,是一种虚拟表,是一个逻辑包

--方便操作,减少复杂的sql语句,增加可读性,更加安全一些

create  view  demo_view

as

select u.id ,u.name from users u  inner  join  number  n on u.stuId = n,id;

--调用

select * from demo_view;

--删除

drop view  demo_view;

4、索引分类

1、普通索引  2、唯一索引  3、全文索引  4、组合索引

普通索引:仅加速查询,最基本的索引,没有任何限制

唯一索引:加速查询+列值唯一(可以有null)

全文索引:仅是哟红MyISAM引擎数据表,作用于char、varchar、text数据类型的列

数组索引:将几个列作为一条索引进行检索,使用最左匹配原则

--索引用于快速找出某个列中有特定值得行,不使用,Mysql必须从第一条记录开始读完整个表

--优点

1、所有的Mysql列类型(字段类型)都可以被索引

2、大大加速数据的查询速度

--缺点

1、创建索引和维护要消耗时间

2、对表的数据进行增加、删除、修改时、索引也需要动态维护,降低了数据的维护速度

create table healerjean (

id int AUTO_INCREMENT PRIMARY KEY COMMENT '主键',

name VARCHAR(32) NOT NULL COMMENT '姓名',

email VARCHAR(64) NOT NULL COMMENT '邮箱',

message text DEFAULT NULL COMMENT '个人信息'

#INDEX index_name (name) COMMENT '索引name'

) COMMENT = '索引测试表';

--给已创建的表  添加索引

create  index  index_name on  healerjean(name);

--删除索引

drop  index  index_name  on  healerjean;

5、触发器

--监视某种情况,并触发某种操作

--触发器创建语法四要素

1、监视地点

2、监视事件

3、触发时间

4、触发事件

--触发器只能创建在永久表上,不能对临时表创建触发器

create  trigger trigger_name

after  before  insert   update   delete  on   表名

for each  row  --这句话砸imysql是固定的

begin

    sql语句;

end;

示例:

delimiter//

create triggeer  triggeer _demo  before insert on  demo1

for each  row  

begin

    insert into  demo1(name)  values("触发器修改了....");

end

//

delimiter;

--删除触发器

drop   trigger  trigger_demo;

SQL  Server  中 Order   By 排序

select *   from  tableName  order  by 字段名(升序)

select *   from tableName  order  by  字段名(降序)

SQL  Server 与 MySQL简单分页查询

sql  server :  select  top   10  *  from  tablename  ;

sql  server :  select *  from  表名  order  by  字段名 offset 10  rows  Fetch  next  10 rows  only;

mysql:  select * from  表名  limit   页数 ,条数;

SQL查询语句

select  * from  a  inner join  b  on a.id=b.id;(内连接);

select *  from a left  join  b on  a.id  =b.id;(左连接)

select  * from a  right  join  b  on  a.id = b.id ; (右连接)

(select  *  from a  left  join  b  on  a.id  = b.id ) union (select  * from a right  join  b  on  a.id = b.id);(全连接)

行内转换

create table t_score

(

name varchar(20) ,

subject varchar(20),

score float

)default charset=utf8;

INSERT INTO `t_score` VALUES

('王海', '语文', '86'),

('王海', '数学', '83'),

('王海', '英语', '93'),

('陶俊', '语文', '88'),

('陶俊', '数学', '84'),

('陶俊', '英语', '94'),

('刘可', '语文', '80'),

('刘可', '数学', '86'),

('刘可', '英语', '88'),

('李春', '语文', '89'),

('李春', '数学', '80'),

('李春', '英语', '87');

select name ,

    max(case  subject  wher  '语文'  then score end)  as 语文,

    max(case  subject   wher   '数学 '  then score  end ) as 数学,

    max(case  subject   wher   '英语'  then score  end ) as 英语,

    sum(score)成绩

from t_score  group  by  name

union  all

select ‘TOTAL’,

    sum(case  subject  when  ‘语文’then score  end),

        sum(case  subject  when  ‘语文’then score  end),

        sum(case  subject  when  ‘语文’then score  end),

    sum(score) from t_score;

2、求出每科每门成绩大于等于80分的人名字

select  *  from t_score  group  by  name  having  min(score)    >=80;

多线程

1、什么是线程?

    线程有时被称为轻量级进程,是程序执行流的最下单位

    线程是CPU调度的一个基本单位

2、什么是进程?

    进程是系统中正在运行的一个程序,程序一旦运行就是进程

3、什么是多线程?

    多线程指从软件或者硬件上实现多个线程并发执行的技术

4、并行和并发的区别?

    并行:是两个任务同时运行(需要多核CPU)

    比如我跟两个网友聊天,左手操作一个电脑跟A聊,同时右手用另一台电脑跟B聊天

    并发:值两个任务都请求运行,而处理器只能接受一个任务,就把这两个任务安排轮流进行

    如果用一台电脑我先发给A消息,然后立刻再给B发消息,然后在跟A聊,在跟B聊。

5、进程和线程的区别?

    地址空间:同一进程的线程共享进程的地址空间,进程之间则是独立的地址空间

    资源拥有:同一进程内的线程共享本进程的资源,进程之间的资源是独立的

    一个进程奔溃后,在保护模式下不会对其他进程产生影响,但是一个线程奔溃整个进程都会死掉,多进程要比多线程健壮。

    线程是处理器调度的基本单位,进程不是

6、创建线程几种方式?

    继承Thread类

    实现Runnable接口

    实现Callable接口

7、什么是守护线程?

    守护线程是个服务线程,服务于其他线程

    典型案例:垃圾回收线程

8、什么是用户线程?

    用户线程就是应用程序里的自定义线程

9、线程有哪些状态?

    新建状态

    就绪状态

    运行状态

    阻塞状态

    死亡状态

10、sleep()方法和wait()有什么区别?

    sleep()可以在任何地方使用

    wait()只能在同步方法或者同步块中使用

11、notify()和 ontifyAll()有什么区别?

    notify是唤醒某个线程

    notifyAll 是唤醒所有的暂停线程

12、线程的run()和start()有什么区别?

    run()相当于线程的任务处理逻辑的入口方法

    start()的作用是启动相应的线程

13、ThreadLocal是什么?有哪些使用场景?

    ThreadLocal用于保存某个线程共享变量

    使用场景:解决数据库连接,Session管理

JAVA Web

1、jsp和servlet有什么区别?

    jsp经编译后就成了Servlet(jsp的本质就是servlet,jvm只能识别java类,不能识别jsp代码,

    web容器将jsp的代码编译成jvm能够识别的java类)

    

    jsp更擅长表现于页面显示,servlet更擅长于逻辑控制

    servlet中没有内置对象,jsp的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。

2、session和cookie有什么区别?

    cookie与文本格式存储在浏览器上,存储量有限

    session存储在服务端,可以无限量存储多个变量并且比cookie更安全

异常

1、throw 和 throws的区别?

    throw则是指抛出一个具体异常类型

    throws是用来声明一个方法有可能抛出的多有异常信息

2、异常什么?

    异常是一个在程序执行期间发生的事件,她在中断正在执行的程序的正常指令流

3、异常处理有几个关键字有哪些?

    try、catch、finally、throw、throws

4、运行时异常都是什么异常类型的子类?

    Exception异常类

5、检查异常是什么?

    简单来说,你的代码还没有运行,编译器就回去检查你的代码,对可能出现的异常必须做出相对应的处理

6、有哪些常见的检查异常?

    除了RuntimeException与其子类,以及错误(Error),其他的差不多都是检查异常

7、异常传播

    这个从异常抛出到控制转移给合适的异常处理语句的过程就叫做异常传播

8、final、finally、jinalize有什么区别?

    final用来修饰类、方法、变量

    finally 只能用在try    catch语句中,表示这段语句最终一定会被执行

9、try-cathy-finally中那个部分可以省略?

    catch和finally语句不能同时省略

网络

1、http响应码301和302代表的是什么?有什么区别?

    301表示页面永久性转移到另外一个地址

    302表示临时性转移

    区别:

    301是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址

    302重定向是临时的重定向,搜索引擎抓取新的内容而保留旧的地址。

2、forward 和redirect的区别?

    forward是服务器内部重定向

    redirect服务器收到请求后发送一个状态给客户,客户将再请求一次

3、get和post请求有哪些区别?

    get请求的参数包在url中

    post请求参数是放在请求body中

    get请求参数有长度限制,post请求没有长度限制

    get请求的参数只能是ASCII码,post请求传参没有这个限制

4、如何实现跨域?

    使用CORS技术

    使用JSONP

5、什么是json?

    json是一种轻量级的数据交换格式

 

概念

1、AOP:面向切面编程

    通过预编译方法 和 运行期动态代理 实现程序功能的同一维护的一种技术

    利用AOP

        将业务逻辑的各部分之间的耦合度降低

        提高程序的可重用性

        不干扰源码

2、IoC:控制反转

    是面向对象编程的一种设计原理

    可以减低代码之间的耦合度

    IoC是一种描述通过第三方去产生获取特定对象方式

    将类的创建 和 依赖关系  卸载配置文件里,又配置文件注入,实现了松耦合

3、MVC    :模型-视图-控制器

    是一种软件规范

    用一种 业务逻辑、数据、界面显示分离的方法组织代码

4、MVVM:模型-视图-视图模型

    视图通过视图模型的dom监听将时间绑定到模型上,而模型则通过数据绑定来管理视图中的数据,

    视图模型从中起到了一个连接桥的作用

5、RESTful

    一种软件架构风格、设计风格、不是标准,只是提供了一组设计原则和约束条件

    主要用于客户端和服务端的软件

    基于这个风格设计的软件可以更简洁、更有层次、更易于实现缓存等机制

6、Vue生命周期

    beforeCreate、create、beforeMount、mounted、beforUpdate、update、beforDestroy、destroyed

7、MyBatis

    MyBatis是一个支持制定化SQL、存储过程以及高级映射的持久层架构

8、Hibernate

    Hibernate是一个开放源码的对象关系映射框架,它对JDBC进行了简单封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架

9、ORM:对象关系映射

    是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换

10、OOP:面向对象编程

    它是一种计算机编程架构

11、JPA: java持久层API

    是JDK注解或XML描述对象 -  关系表的映射关系

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜