Java面试日常总结大杂烩

日常总结大杂烩:


一。 取出特定行数的数据

1. select* from 表名 limit m,n;

2. select * from 表名  limit [offset,] rows;


1. m代表从m+1条记录行开始检索,n代表取出n条数据。(m可设为0)如:select * from表名 limit 6,5;表示:从第7条记录行开始算,取出5条数据 


2.值得注意的是,n可以被设置为-1,当n为-1时,表示从m+1行开始检索,直到取出最后一条数据。如:SELECT * FROM 表名 limit 6,-1;表示:取出第6条记录行以后的所有数据。 


3.若只给出m,则表示从第1条记录行开始算一共取出m条如:SELECT * FROM 表名 limit 6;表示:取出前6条记录行。


二。 ArrayList list = new ArrayList(20);中的list扩充几次()

A 0     B 1     C 2      D 3

答案:A

ArrayList动态扩容机制

初始化:有三种方式

1. 默认的构造器,将会以默认的大小来初始化内部的数组:public ArrayList();

2. 用一个ICollection对象来构造,并将该集合的元素添加到ArrayList:  public ArrayList(Collection<? extends E> c)

3. 用指定的大小来初始化内部的数组: public ArrayList(int initialCapacity) 

  
这里我们来重点关注一下无参数构造器的实现过程:

ArrayList list=new ArrayList(); 这种是默认创建大小为10的数组,每次扩容大小为1.5倍 (10*1.5=15)
ArrayList list=new ArrayList(20); 这种是指定数组大小的创建,创建时直接分配其大小,没有扩充。 
所以,扩充为0次

链接:https://www.nowcoder.com/questionTerminal/85bf28c36fa14484b950f07d269dcd49
来源:牛客网

本题需要注意的是:调用的是带参的构造方法。
另外也要注意:
1、如果不指定容量,而初始大小为10,动态增长时,增长到当前容量的1.5倍。
2、与之类似的还有,HashMap的初始大小为16,增长时,直接容量翻倍*2,如源代码。
1
2
3
4
5
6
7
8
9
void addEntry(int hash, K key, V value, int bucketIndex) {
    if ((size >= threshold) && (null != table[bucketIndex])) {
        resize(2 * table.length);
        hash = (null != key) ? hash(key) : 0;
        bucketIndex = indexFor(hash, table.length);
    }
    createEntry(hash, key, value, bucketIndex);
}
3、Vector的初始大小为10,如果没有指定每次增长的大小,则默认是翻倍增长。

4.补充:hashtable是2倍+1,concurrenthashmap也是2倍




三。List list=new ArrayList()怎么理解??? 


List是接口,ArrayList是List的实现类。

至于为什么是写成List list = new ArrayList()而不是ArrayList arrayList = new ArrayList()有如下的原因:
 1 接口有什么好处,这种定义方式就有什么好处当然你可以用 ArrayList   list   =   new   ArrayList()但是一般不这么用

 2 设计模式中有对依赖倒置原则。程序要尽量依赖于抽象,不依赖于具体。从Java语法上,这种方式是使用接口引用指向具体实现。

比如,你若希望用LinkedList的实现来替代ArrayList的话,只需改动一行即可:List   list   =   new   LinkedList();而程序中的其它部分不需要改动,这样比较灵活

这个如果你想把存储结构该为LinkedList的时候,只要把List  list=new ArrayList()改为List list=new LinkedList()而其他的所有的都不需要改动。这也是一种很好的设计模式.一个接口有多种实现,当你想换一种实现方式时,你需要做的改动很小.
 3 面向接口编程
 4 提高程序宽展性,以后修改维护好些



总结一下:

ArrayList不是继承List接口,是实现了List接口。
你写成ArrayList arrayList = new ArrayList();这样不会有任何问题。和List list = new ArrayList();相比这2个写是有区别的。

      arrayList是一个ArrayList对象,它可以使用ArrayList的所有方法。(包括list接口中没有定义的方法)
      List是接口,它是不可以被实例化的(接口是个抽象类),所以必须以它的实现类去实例化它。list对象虽然也是被实例化为ArrayList但是它实际是List对象,list只能使用ArrayList中已经实现了的List接口中的方法,ArrayList中那些自己的、没有在List接口定义的方法是不可以被访问到的。
      我们说,用接口去做是有它的好处的,如果你把类型定义成ArrayList(也就是一个具体的实现类)那么你就只能接收这一种类型的数据了,如果你要是定义为List那么你不仅可以接收ArrayList的对象还可以接收LinkedList的对象,这样你的程序就灵活了

参考:https://blog.csdn.net/llayjun/article/details/46812151



四。 ,下列说法正确的是()

A.一个文件里可以同时存在两个public修饰的类

B.构造函数可以被重写(override)

C.子类不能访问父类非public和protected修饰的属性

D.final修饰的类可以被继承

答案:C

        一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。至于main()不是必须要放在public类中才能运行程序。

  重写是子类继承父类后对父类的方法进行修改。方法名,参数,返回值必须一样。 不能重写被标示为final的方法。如果不能继承一个方法,则不能重写这个方法。

扩展:重写override,重载overload的区别

   java的方法重载

        就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,而且返回值类型可以相同也可以不相同,这也是面向对象的多态性。

   java的方法重写

        父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

        若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类

        子类函数的访问修饰权限不能少于父类的

        重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。




五。 关于 JAVA 堆,下面说法错误的是( )

A.所有类的实例和数组都是在堆上分配内存的        

B.对象所占的堆内存是由自动内存管理系统回收

C.堆内存由存活和死亡的对象,空闲碎片区组成       

D.数组是分配在栈中的

答案:D

        首先数组是分配在堆中的,故D的说法不正确。

        Java堆的结构:JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉之前,他们会一直占据堆内存空间。




六。 在使用super 和this关键字时,以下描述正确的是()

A.在子类构造方法中使用super()显示调用父类的构造方法;

    super()必须写在子类构造方法的第一行,否则编译不通过
B.super()和this()不一定要放在构造方法内第一行
C.this()和super()可以同时出现在一个构造函数中
D.this()和super()可以在static环境中使用,包括static方法和static语句块

答案:A

        Java关键字this只能用于方法方法体内当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。

        super关键字和this作用类似,是被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。

        不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最近的超类)



七。 下列语句哪一个正确()

A.Java程序经编译后会产生machine code

B.Java程序经编译后会产生byte code

C.Java程序经编译后会产生DLL

D.以上都不正确

答案:B

        Java字节码是Java源文件编译产生的中间文件

        java虚拟机是可运行java字节码的假想计算机 java的跨平台性也是相对与其他编程语言而言的 。


        先介绍一下c语言的编译过程:c的文件经过C编译程序编译后生成windows可执行文件exe文件然后在windows中执行。

        再介绍java的编译过程:java的文件由java编译程序将java字节码文件(class文件)在java虚拟机中执行。机器码是由CPU来执行的;Java编译后是字节码。

        电脑只能运行机器码。Java在运行的时候把字节码变成机器码。C/C++在编译的时候直接编译成机器码


 八。  下列哪一种叙述是正确的()

A.abstract修饰符可修饰字段、方法和类

B.抽象方法的body部分必须用一对大括号{ }包住

C.声明抽象方法,大括号可有可无

D.声明抽象方法不可写出大括号

答案:D

        abstract修饰符用来修饰类和成员方法 

        用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。 

        用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。 

        Abstract是Java中的一个重要关键字,可以用来修饰一个类或者一个方法。

        修饰一个方法时,表示该方法只有特征签名(signature),没有具体实现,而是把具体实现留给继承该类的子类,所以不能有大括号。



九。 下列说法正确的有()

A.class中的constructor不可省略

B.constructor必须与class同名,但方法不能与class同名

C.constructor在一个对象被new时执行

D.一个class只能定义一个constructor

答案:C 

        这里可能会有误区,其实普通的类方法是可以和类名同名的,和构造方法唯一的区分就是,构造方法没有返回值。 



十。 GC线程是否为守护线程()

答案:是

        线程分为守护线程和非守护线程(即用户线程)。

        只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。

        守护线程最典型的应用就是 GC (垃圾回收器)


十一。  关于sleep()和wait(),以下描述错误的一项是( )

A. sleep是线程类(Thread)的方法,wait是Object类的方法;

B. sleep不释放对象锁,wait放弃对象锁;

C. sleep暂停线程、但监控状态仍然保持,结束后会自动恢复;

D. wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状态。

答案:D

        sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

        wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。


十二。 

方法resume()负责恢复哪些线程的执行( )

A,通过调用stop()方法而停止的线程。

B,通过调用sleep()方法而停止的线程。

C,通过调用wait()方法而停止的线程。

D,通过调用suspend()方法而停止的线程。

答案:D

        suspend可以挂起一个线程,就是把这个线程暂停了,它占着资源,但不运行,用resume是恢复挂起的线程,让这个线程继续执行下去。


十三。 Hashtable和HashMap的异同

同:都使用哈希表来存储键值对,在数据结构上基本相同,都创建了一个继承自Map.Entry的私有内部类Entry,每一个Entry对象表示存储在哈希表中的一个键值对。

1. Hashtable是同步的,线程安全的(就是一些公开的方法比如get()使用了synchronized描述符,而遍历视图比如keySet使用了Collection.synchronizedSet进行同步包装);而HashMap不是同步的,线程不安全

2. Hashtable不支持nullkey和nullvalue,它会抛出异常,而HashMap支持,因为HashMap在实现的时候,将null的hashCode值定为0,从而将其存放在哈希表的第0个bucket中

3. 、Hashtable已经被淘汰了,尽量少用,不需要线程安全就用HashMap,需要就用ConcurrentHashMap。

4.,Hashtable产生于JDK1.1,而HashMap产生于JDK1.2,HashMap比Hashtable出现的晚一点

5. HashMap继承自抽象类AbstractMap,而Hashtable继承自抽象类Dictionary,而Dictionary类是一个已经废弃的类


十四。 并发操作会带来哪些数据不一致性? A不可修改、不可重复读、脏读、死锁 B丢失修改、脏读、死锁 C不可重复读、脏读、死锁

D 丢失修改、不可重复读、脏读


脏读:就是指当一个事务对数据进行了修改但还没有提交到数据库时,另一个事务访问并使用了这个数据。

不可重复读:在一个事务内两次读数据之间,第二个事务访问该数据并进行了修改。

丢失修改:两个事务读入同一数据并修改,T2提交的结果破坏了T1提交的结果。例如T1读A修改为A-1,T2也读A修改为A-1(实际上应该是读A-1,修改为A-2)

幻影读:同一事务在两个不同的时间段执行相同的查询条件得到的结果不一致。

注意区分:

不可重复读的重点是修改 

同样的条件 ,   你读取过的数据 ,   再次读取出来发现值不一样了 

幻读的重点在于新增或者删除 

同样的条件 ,   第 1 次和第 2 次读出来的记录数不一样。

十五。下列的()原始类型在使用流时可以互换。
A.byte和boolean 
B.char和int
C.byte和char
D.String和char

正确答案:B
B。【解析】本题考查Java语言中字节类型的概念。在Java语言中,byte是字节类型,用1字节表示;boolean是布尔类型,用true和false表示,它们的表示方法并不一样,也不提供它们之间的转换,选项A错误。Java内部用整数来表示char,通常可以在方法调用和其他语句中互换使用char和int,选项B正确。char用2字节表示,byte字节类型用1字节表示,Java内部也不允许互换使用它们,选项C错误。String在Java语言中是一个类,它提供对字符串的一系列操作,而char是Java语言中的一个基本类型,它不是一个类,两者有本质的区别,故而它们是不能互换使用的,选项D错误。需要注意的是,在Java语言中提供的类都是以大写字母开头,基本类型都用小写字母表示。

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

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

相关文章

Eclipse深度患者设置VSCode快捷键

VSCode设置Eclipse中常用的快捷键 将eclipse中一些基本的快捷键输入右侧用户快捷键设置中&#xff1a; // Place your key bindings in this file to overwrite the defaults [{ "key": "alt/", "command": "editor.action.triggerSugges…

Java基础日常总结!!

Java基础日常总结&#xff01;&#xff01;1. Java的字符类型采用的是Unicode编码方案&#xff0c;每个Unicode码占用( )个比特位 在java中一个unicode占2个字节&#xff08;byte&#xff09;.一个字节等于8比特位&#xff08;bit&#xff09;.所以每个Unicode码占用 16 个比特…

NodeJS学习————关于let和const命令的使用理解

let的基本用法 在新的js规范ES6中&#xff0c;新增了let 命令&#xff0c;用来声明变量。用法类似于var&#xff0c;但不同的是所声明的变量&#xff0c;只在let 命令所在的代码块内有效。 { let a 10; var b 10; } //ReferenceError: a is not defined console.log(a …

forward和redirect的区别是什么?

forward和redirect是什么&#xff1f; 是servlet种的两种主要的跳转方式。forward又叫转发&#xff0c;redirect叫做重定向。 区别&#xff1a;&#xff08;本地效应次数&#xff09; 地址栏&#xff0c;数据共享&#xff0c;应用场景&#xff0c;效率&#xff0c;本质&…

MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?

一、MySQL索引类型 MySql常见索引类型有&#xff1a;主键索引、唯一索引、普通索引、全文索引、组合索引 PRIMARY KEY&#xff08;主键索引&#xff09; ALTER TABLE table_name ADD PRIMARY KEY ( column ) UNIQUE(唯一索引) ALTER TABLE table_name ADD UNIQUE (colu…

Servlet入门总结

一、了解Servlet的概念Servlet定义&#xff1a;Servlet是基于Java技术的Web组件&#xff0c;由容器管理并产生动态的内容。Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能。Servlet与客户端通过Servlet容器实现的请求/响应模型进行交互。 注意&#xff1a;Servlet不是从…

MySQL日期类型的处理总结

一、概述 MySQL中的日期类型包括以下5种&#xff1a; 类型大小 (字节)范围格式用途DATE31000-01-01/9999-12-31YYYY-MM-DD日期值TIME3-838:59:59/838:59:59HH:MM:SS时间值或持续时间YEAR11901/2155YYYY年份值DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:…

详解HTTP协议~~~

详解HTTP协议~~~HTTP 简介HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。。HTTP是一个基于TCP/IP通信协议来传递数据&#xff08;…

MyBatis基础知识概述

一、依赖配置 添加依赖即可&#xff0c;jar包或pom依赖&#xff1a; <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version> </dependency> 二、SqlSessionFactory 2.1 什…

Mybatis Plus————代码生成器

代码生成器 MyBatis Plus是MyBatis的扩展框架&#xff0c;而代码生成器是MP的核心功能之一&#xff0c;另外还有 “条件构造器”和“通用CRUD”等功能。 步骤演示 mp的代码生成器有两种方式自动生成代码&#xff0c;一种是通过main方法来执行程序&#xff0c;另一种是通过maven…

Spring MVC 流程图解析

Spring MVC 流程图解析Spring MVC工作流程图图一图二 SpringMVC工作流程描述DispatcherServlet&#xff0c;HandlerMapping&#xff0c;HandlerExecutionChain&#xff0c;HandlerAdapter&#xff0c;HttpMessageConveter&#xff0c;BindingResult&#xff0c;ModelAndView&am…

Java并发编程实战————可重入内置锁

引言 在《Java Concurrency in Practice》的加锁机制一节中作者提到&#xff1a; Java提供一种内置的锁机制来支持原子性&#xff1a;同步代码块。“重入”意味着获取锁的操作的粒度是“线程”&#xff0c;而不是调用。当某个线程请求一个由其他线程持有的锁时&#xff0c;发出…

java的守护进程与非守护进程

java的守护进程与非守护进程 最近重新研究Java基础知识&#xff0c;发现以前太多知识知识略略带过了&#xff0c;比较说Java的线程机制&#xff0c;在Java中有两类线程&#xff1a; User Thread(用户线程)、Daemon Thread(守护线程) &#xff0c;&#xff08;PS:以前忽略了&a…

双剑合璧————Spring Boot + Mybatis Plus

引言 最近在学习Mybatis Plus的使用&#xff0c;希望通过spring boot快速将mybatis plus整合进来。 对于springboot项目&#xff0c;mybatis plus团队也有自己的启动器 &#xff1a;mybatis-plus-boot-starter。这个依赖内部已经整合了mybatis-spring&#xff0c;也包括非快速…

Java中常用的类,包,接口

Java中常用的类&#xff0c;包&#xff0c;接口包名说明java.lang该包提供了Java编程的基础类&#xff0c;例如 Object、Math、String、StringBuffer、System、Thread等&#xff0c;不使用该包就很难编写Java代码了。java.util该包提供了包含集合框架、遗留的集合类、事件模型、…

Collection框架介绍

Collection&#xff1a;List列表&#xff0c;Set集&#xff0c; Map&#xff1a;Hashtable&#xff0c;HashMap&#xff0c;TreeMapCollection 是单列集合 List 元素是有序的、可重复 有序的 collection&#xff0c;可以对列表中每个元素的插入位置进行精确地控制。 可以根据…

Git初学札记(一)————Git简介与安装

前言 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。&#xff08;在这里再一次致敬Linus大神&#xff09;特点 分布式相比于集中式的最…

Hashtable、HashMap、TreeMap总结

Hashtable、HashMap、TreeMap总结三者均实现了Map接口&#xff0c;存储的内容是基于key-value的键值对映射&#xff0c;一个映射不能有重复的键&#xff0c;一个键最多只能映射一个值。 &#xff08;元顺初线&#xff09;&#xff08;1&#xff09; 元素特性HashTable中的key、…

Git初学札记(二)————EGit导入远程Git仓库项目(Clone操作)

引言 我们在实际开发项目的时候&#xff0c;难免要使用像Eclipse或者IDEA这样的继承开发工具&#xff0c;除了部分“牙牙学语”的程序员需要手动输入javac去编译程序以外&#xff0c;在实际开发中手动编译并运行项目的“猿族”应该是已经绝种了。 我个人认为&#xff0c;使用gi…

int和Integer的比较

int和Integer的比较1 int和IntegerJDK1.5引入了自动装箱与自动拆箱功能&#xff0c;Java可根据上下文&#xff0c;实现int/Integer,double/Double,boolean/Boolean等基本类型与相应对象之间的自动转换&#xff0c;为开发过程带来极大便利。最常用的是通过new方法构建Integer对象…