【java面试】五星电器 java开发 it专业测试-解析

目录

1.继承thread类必须实现哪个方法

答:没有必须实现的类

2.关于ArrayList 和LinkedList的说法错误的是
  1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;

  2. 底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构(JDK1.6之 前为循环链表,JDK1.7取消了循环。注意双向链表和双向循环链表的区别:);

  3. 插入和删除是否受元素位置的影响:

    ① ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素 位置的影响。 比如:执行 add(E e) 方法的时候, ArrayList 会默认在将指定的元素追加到此列表的末尾,这种 情况时间复杂度就是O(1)。但是如果要在指定位置 i 插入和删除元素的话( add(int index, E element) )时 间复杂度就为 O(n-i)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向 前移一位的操作。

    ② LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,都是 近似 O(1)而数组为近似 O(n)。

  4. 是否支持快速随机访问: LinkedList 不支持高效的随机元素访问,而 ArrayList 支持。快速随机访问就是通 过元素的序号快速获取元素对象(对应于 get(int index) 方法)。

  5. 内存空间占用: ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空 间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数 据)。

3.MySQL中语句的%和 _ 表达正确的是

通配符的分类:
%百分号通配符: 表示任何字符出现任意次数 (可以是0次).
_下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符.

Mysql| 使用通配符进行模糊查询(like,%,_)

4.下面那个关于接口的表述是错误的

一个类只能extends一个父类,但可以implements多个接口。java通过使用接口的概念来取代C++中多继承。

与此同时,一个接口则可以同时extends多个接口,却不能implements任何接口。因而,Java中的接口是支持多继承的。

接口可以被其他接口继承;

只有类才可以实现接口;

5.下面哪项不是数据库的四大特征之一

事物的特性(ACID)

  1. 原子性:(Atomicity) 事务是小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  2. 一致性:(Consistency) 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
  3. 隔离性:(Isolation) 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  4. 持久性:(Durability) 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影 响。
6.以下对封装的描述正确的是

第一:重用;
第二:不必关心具体的实现;
第三:面向对象三大特征之一;
第四,具有安全性!

提高了数据的安全性
别人不能够通过 变量名.属性名 的方式来修改某个私有的成员属性
操作简单
封装后,多个调用者在使用的时候,只需调用方法即可,调用者不需要再进行判断
隐藏了实现
实现过程对调用者是不可见的,调用者只需调用方法即可,不知道具体实现过程

7.以下代码输出运行输出的是

父类的private属性,子类访问是否报错(编译出错?运行出错?) 编译出错

访问控制符:

public:公开;可以被所有其他类所访问。

private:私有;只能被自己访问和修改。

protected:保护;自身、子类及同一个包中类可以访问。

default:默认;本包可见(本包中的子类和非子类均可访问,不同包中的类及子类不能访问)

类内部本包子类外部包
public
protected×
default××
private×××
8.下面那个HTTP的状态码表示数据永久重定向

200 – 请求成功

301 – 资源(网页等)被永久转移到其它URL

404 – 请求的资源(网页等)不存在

500 – 内部服务器错误

1**信息,服务器收到请求,需要请求者继续执行操作

2**成功,操作被成功接收并处理

3**重定向,需要进一步的操作以完成请求

4**客户端错误,请求包含语法错误或无法完成请求

5**服务器错误,服务器在处理请求的过程中发生了错误

常见的HTTP状态码有哪些

常见的HTTP状态码

常见的HTTP状态码及说明

9.下面哪项不是合法的bean的scope属性值

答:cookie不是合法的属性值

Spring4 bean 的作用域scope
通过使用Bean定义来指定实例的作用域(scope),而不需要在Java的类级别来完成这个任务,这种方法非常强大和灵活。Spring框架现有五种作用域,其中有三个需要在使用Web相关的ApplicationContext环境下才可以使用。

1.1 singleton:默认的作用域,仅为每个Bean对象创建一个实例
把一个bean定义设置为singlton作用域时,Spring IoC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。

1.2 prototype:可以根据需要为每个Bean对象创建多个实例
Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
请注意,典型情况下,DAO不会被配置成prototype,因为一个典型的DAO不会持有任何会话状态,因此应该使用singleton作用域。

1.3 web作用域
1.3.1 request:为每个HTTP请求创建它自有的一个Bean实例,仅在Web相关的ApplicationContext中生效。
1.3.2 session:为每个HTTP会话创建一个实例,仅在Web相关的ApplicationContext中生效。
1.3.3 global session:为每个全局的HTTP会话创建一个实例。一般仅在porlet上下文中用生效。同时仅在Web相关的ApplicationContext中生效。

spring4 bean的作用域scope 创建及生命周期

Spring支持五个作用域,分别是singleton、prototype、request、session、global session

作用域说明
singletonsingleton 是默认的作用域,在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,在创建起容器时就同时自动创建了一个bean的对象
prototype每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象
request每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
session同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
global-session一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境

Spring Bean 的生命周期,如何被管理的?

10.下面那个是线程安全的
线程安全线程不安全
StringBufferStringStringBuilder
HashTableHashMap
VectorArrayListLinkedList
11.关于变量的命名规范,说法正确的是

Java变量的基本命名法则:
1、以下划线、字母、美元符开头。
2、后面跟下划线、字母、美元符以及数字。
3、 没有长度限制(但也不能太长!)。
4、对大小写敏感(意思是大小写代表不同含义)

Java中变量名的命名规范

12.下面哪个命令用于测试网络连通性的

答:ping

13.可以是用哪个工具查看java线程状态

答:jstack

14.java如何创建多线程

**继承Thread类:**继承Thread类,再重写Thread类的Run方法,然后调用start()方法启动线程,启动线程后执行的是run方法。注意:多次启动线程(多次调用start()方法)是不合法的。

**实现Runnable接口:**实现Runnable接口,再重写run方法,然后将这个实现类当做参数传给Thread类,例如:Thread dog = new Thread(runn,“小狗”),创建了一个线程,这里的runn是实现Runnable接口的类,“小狗”是线程的名字。

Java创建多线程的两种方式:继承Thread类和实现Runnable接口

java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点:

首先,java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了。

其次,如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

多线程——继承Thread 类和实现Runnable 接口的区别

15.下面哪个关键词与AOP无关

IOC: 控制反转也叫依赖注入。IOC利用java反射机制,AOP利用代理模式。IOC 概念看似很抽象,但是很容易理解。 说简单点就是将对象交给容器管理,你只需要在spring配置文件中配置对应的bean以及设置相关的属性,让spring 容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始 化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。
AOP: 面向切面编程。(Aspect-Oriented Programming) 。AOP可以说是对OOP的补充和完善。OOP引入封装、 继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。实现AOP的技术,主要分为两大类: 一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入 的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理

16.在Java语言中,下列关于类的继承的描述哪个是正确的
17.Java类中静态integer变量的默认值是什么

Java中8种基本数据类型总结

序号数据类型大小/位封装类默认值可表示数据范围
1byte(位)8Byte0-128~127
2short(短整数)16Short0-32768~32767
3int(整数)32Integer0-2147483648~2147483647
4long(长整数)64Long0-9223372036854775808~9223372036854775807
5float(单精度)32Float0.01.4E-45~3.4028235E38
6double(双精度)64Double0.04.9E-324~1.7976931348623157E308
7char(字符)16Character0~65535
8boolean8Booleanflasetrue或false
public class _Test {
    static  String sr;
    static Integer i;
    static Character t;
    static Long l;
    public static void main(String[] args) {
        System.out.println(sr);
        System.out.println(i);
        System.out.println(t);
        System.out.println(l);
    }
}
//结果
null
null
null
null

java各数据类型的默认值【含各种变量】

Java中8种基本数据类型及其默认值

18.下面哪种情况,不会影响普通索引生效

列与列对比
某个表中,有两列(id和c_id)都建了单独索引,下面这种查询条件不会走索引
存在NULL值条件
我们在设计数据库表时,应该尽力避免NULL值出现,如果非要不可避免的要出现NULL值,也要给一个DEFAULT值,数值型可以给0、-1之类的, 字符串有时候给空串有问题,就给一个空格或其他。如果索引列是可空的,是不会给其建索引的,索引值是少于表的count(*)值的,所以这种情况下,执行计划自然就去扫描全表了。
NOT条件
我们知道建立索引时,给每一个索引列建立一个条目,如果查询条件为等值或范围查询时,索引可以根据查询条件去找对应的条目。反过来当查询条件为非时,索引定位就困难了,执行计划此时可能更倾向于全表扫描,这类的查询条件有:<>、NOT、in、not exists
LIKE通配符 (like的模糊查询以%开头,索引失效)
当使用模糊搜索时,尽量采用后置的通配符,例如:name||’%’,因为走索引时,其会从前去匹配索引列,这时候是可以找到的,如果采用前匹配,那么查索引就会很麻烦,比如查询所有姓张的人,就可以去搜索’张%’。相反如果你查询所有叫‘明’的人,那么只能是%明。这时候索引如何定位呢?前匹配的情况下,执行计划会更倾向于选择全表扫描。后匹配可以走INDEX RANGE SCAN。
所以业务设计的时候,尽量考虑到模糊搜索的问题,要更多的使用后置通配符。
条件上包括函数(包含加减乘除的谓词运算)
查询条件上尽量不要对索引列使用函数,比如下面这个SQL
这样是不会走索引的,因为索引在建立时会和计算后可能不同,无法定位到索引。但如果查询条件不是对索引列进行计算,那么依然可以走索引。比如
这样的函数还有:to_char、to_date、to_number、trunc等
复合索引前导列区分大
当复合索引前导列区分小的时候,我们有INDEX SKIP SCAN,当前导列区分度大,且查后导列的时候,前导列的分裂会非常耗资源,执行计划想,还不如全表扫描来的快,然后就索引失效了。
数据类型的转换
当查询条件存在隐式转换时,索引会失效。
Connect By Level
使用connect by level时,不会走索引。
谓词运算
加减乘除的谓词运算

索引失效和注意事项

索引失效的情况有哪些?索引何时会失效?

19.欲构造ArrayList类得出一个实例,继承List接口,下列哪个方法是正确的

List myList=new ArrayList();

不能直接建立接口的实例,只能通过实现接口的相应的类来实现接口。

20.OutOfMemory错误的常见原因不是下面哪个

内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;

代码中存在死循环或循环产生过多重复的对象实体; 使用的第三方软件中的BUG; 启动参数内存值设定的过小;

(堆内存溢出)java.lang.OutOfMemoryError: Java heap space

Java heap space,Java应用程序创建的对象存放在这片区域,垃圾回收(Garbage Collection)也发生在这块区域。通常一些比较“重型”的操作可能会导致该异常,比如:需要创建大量的对象,层次比较深的递归操作等.

OutOfMemoryError异常的常见原因

21.类的构造函数是否可以被override?是否可以被overload?

构造器不能被继承,因此不能被重写(override),但可以被重载(overload)。

重载和重写的区别
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以 不同,发生在编译时。

重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类, 访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。

22.下面哪个关键词可以防止类被override?

final: 不能修饰抽象类 方法可以被重载 但不能被重写

static:

一:static方法是不能被重写的,重写通常针对的是接口方法,而接口方法中只是进行的接口定义,而没有方法的实现,而static方法肯定是要求有方法体的,所以有冲突。
二:static方法是可以重载的,因为重载只是定义了方法名相同,其余的一切参数类型、个数、返回值发生变化都是被允许的,所以是可以重载方法的(实际上就相当于重新创建了一个静态方法)。

abstract:抽象类也是类,构造函数可以重载

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

const:

JAVA中的关键字static,final和const

23.在Java中,下面对于构造函数的描述正确的是
24.Java接口修饰符可以为

接口的方法默认是public abstract;

(1)接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们

(2)接口仅仅描述系统能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;

(3)接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量

(4)接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因为变化的东西也不能够算共有。所以变量是不可变(final)类型,也就是常量了。

(5) 接口中不可以定义变量?如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为来修改属性。
通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放,接口是对开闭原则的一种体现。

所以:
接口的方法默认是public abstract;
接口中不可以定义变量即只能定义常量(加上final修饰就会变成常量)。所以接口的属性默认是public static final 常量,且必须赋初值。

注意:final和abstract不能同时出现。

Java接口的修饰符可以为()

25.下面哪项不是spring注入bean的方式

通过构造方法注入Bean

通过set方法注入Bean

通过属性去注入Bean

通过List注入Bean

通过Map去注入Bean

Spring注入Bean的几种方式

26.对象方法上的synnchronized关键字吧锁加在哪里的

synnchronized:同步,使不同线程同步执行某一部分,保证某一时刻,只有一个线程能够执行某个代码块或者方法

1、synchronized锁住的对象,其他线程中仍可以正常进行访问,仅在其申请该对象的锁时会造成阻塞

如:synchronized(list){…},当list被锁住时,其余线程仍然可以进行访问,但是当其他线程意图申请list的锁synchronized(list)时,会等待list锁的释放

2.用synchronized修饰的一般方法

用synchronized修饰的方法,看似是锁住了该方法,其实是锁住了对象,即该方法所属的实例化对象。

3.用synchronized修饰的静态方法

与synchronized修饰的非静态方法不同,用synchronized修饰的static方法,在运行时不再是锁住实例化对象,而是锁住整个类对象

4.用synchronized锁住ArrayList等集合

当锁住集合后,集合里面的元素并未被锁住,仍然可以申请里面每个元素的锁

synchronized使用

27.下面哪些关于java语言表述是错误的
28.下面关于bean的说法正确的是

Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。

Spring 的 bean 作用域(scope)类型
  1、singleton:单例,默认作用域。

2、prototype:原型,每次创建一个新对象。

3、request:请求,每次Http请求创建一个新对象,适用于WebApplicationContext环境下。

4、session:会话,同一个会话共享一个实例,不同会话使用不用的实例。

5、global-session:全局会话,所有会话共享一个实例。

线程安全这个问题,要从单例与原型Bean分别进行说明。

原型Bean
  对于原型Bean,每次创建一个新对象,也就是线程之间并不存在Bean共享,自然是不会有线程安全的问题。

单例Bean
  对于单例Bean,所有线程都共享一个单例实例Bean,因此是存在资源的竞争。

Spring 中的bean 是线程安全的吗?

可以配置基于访问会话的bean

Spring Bean 的生命周期,如何被管理的?

谈谈我对Spring Bean 生命周期的理解

Spring 只帮我们管理单例模式 Bean 的 完整 生命周期,对于 prototype 的 bean ,Spring 在创建好交给使用者之后则不会再管理后续的生命周期。

29.下面关于restful的说法错误的是
http方法资源操作幂等安全
GETSELECT
POSTINSERT
PUTUPDATE
DELETEDELETE

POST(创建资源)、GET(获取资源)、PUT(修改资源)、DELETE(删除)。它们正好对应了CRUD。

服务器返回资源推荐使用json格式

每个URI代表一种资源

我们使用头部的Accept字段来区分接口版本信息

30.下面关于MySQL数据库中myisam和innidb的表述错误的是

MySQL 常见的两种存储引擎:MyISAM与 InnoDB的理解

关于二者的对比与总结:

  1. count运算上的区别:

    因为MyISAM缓存有表meta-data(行数等),因此在做COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的。

    而对于InnoDB来说,则没有这种缓存。

  2. 是否支持事务和崩溃后的安全恢复:

    MyISAM 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型 更快,但是不提供事务支持。

    但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务 (commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

  3. 是否支持外键: MyISAM不支持,而InnoDB支持。

    MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作 为主库的存储引擎。 一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以 当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压 缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是好的选择。

MyISAMInnoDB
count运算上的区别MyISAM缓存有表meta-data(行数等)没有这种缓存。
是否支持事务MyISAM 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务 、回滚和崩溃修复能力的事务安全型表。
是否支持外键MyISAM不支持InnoDB支持
是否支持行级锁支持行锁和表锁只支持表锁

4、MyIsAm引擎的锁机制

共享锁:可同时读、读的同时不能写

独占锁:写的同时不能读和写

如何加锁:

select前,对所有涉及的表自动加共享锁

更新数据时,加独占写锁

MyIsAM支持并发插入:读的时候插入,但是插入的数据当前事务无法读取

设置参数concurrent_Insert

0:不允许并发插入,1:无空洞,允许并发插入,2:有无都允许并发插入

空洞:删除记录造成

5、InnoDB引擎的锁机制

(之所以以InnoDB为主介绍锁,是因为InnoDB支持事务,支持行锁和表锁用的比较多,Myisam不支持事务,只支持表锁)

共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。
意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。

说明:

1)共享锁和排他锁都是行锁,意向锁都是表锁,应用中我们只会使用到共享锁和排他锁,意向锁是mysql内部使用的,不需要用户干预。

2)对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);对于普通SELECT语句,InnoDB不会加任何锁,事务可以通过以下语句显示给记录集加共享锁或排他锁。
共享锁(S):SELECT * FROM table_name WHERE … LOCK IN SHARE MODE。
排他锁(X):SELECT * FROM table_name WHERE … FOR UPDATE。

3)InnoDB行锁是通过给索引上的索引项加锁来实现的,因此InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!。

InnoDB与MyIsAM锁问题

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值