Java、数据库、大数据。。面试题目整理(不断更新)!!!

一、Java部分

选择题部分

1.以下关于 abstract 关键字的说法,正确的是(D)。
A.abstract 可以与 final 并列修饰同一个类。
B.abstract 类中不可以有 private 的成员。
C.abstract 类中必须全部是 abstract 方法。
D.abstract 方法必须在 abstract 类或接口中。
2.以下方法,(B)不是对 add 方法的重载。//重载和方法返回值有关联,和返回值无关系。

public class Test{
public void add(int x,int y,int z){
//todo
}
}

A.public int add(int x,int y,float z){return 0;} //参数列表和上面代码不一样
B.public int add(int x,int y,int z){return 0;} //参数列表一样,有无返回值和重载无关系。
C.public void add(int x,int y){ } //参数列表和上面代码不一样
D.以上都不是
3.关于 Java 堆,下面说法错误的是(D)。
A.所有类的实例都是在堆上分配内存。
B.对象所占的堆内存是由自动内存管理系统回收。
C.堆内存由存活和死亡的对象,空闲碎片区组成。
D.数组是分配在栈中的。 //数组是分配在内存中的。
4.观察以下代码,输出结果是(C)。

public class MyClass{
	int i = -1;
	private void action(){
		int i = 0;
		i++;
	}
}
public static void main(String[] args){
	MyClass mc = new MyClass();
	mc.action();
	System.out.println(mc.i);
}

A. 1 B. 0 C. -1 D.抛出异常
5.观察下面的代码,正确的结果是(A)。

class Letter{
char c = 'x';
}
public class PassObject{
static void f(Letter y){
y.c = 'z';
}
public static void main(String[] args){
Letter x = new Letter();
x.c = 'a';
f(x);
System.out.println(x.c);
}
}

A. z B. a C. x D. null
6.观察如下代码,正确显示结果为(C)。

class A{
void callme(){
System.out.println("Inside A's callme()method");
}
}
class B extends A{
void callme(){
System.out.println("Inside B's callme() method");
}
}
class C extends B{
void callme(){
System.out.println("Inside C's callme() method");
}
}
public class Dispatch{
public static void main(String args[]){
A a = new C();
a.callme();
}
}

A.Inside A’s callme()method
B.Inside B’s callme()method
C.Inside C’s callme()method
D.抛出异常
7.观察如下代码,正确的显示结果是(A)。

public class MyClass{
public static void main(String[] args){
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");//新建string 则肯定不同
String s4 = new String("hello");
System.out.println((s1 == s2) + "/" + (s3 == s4));
}
}

A.true/false
B.true/true
C.false/true
D.false/false
8.观察如下代码,正确的显示结果是(B)。

class MyException extends Exception{
public MyException(String msg){
super(msg);
}
}
public class MyClass {
public static void main(String[] args){
try{
if(true) throw new MyException("bad");//在这抛出异常,bad打印出,ok不会打印。
System.out.println(" OK");
}catch(MyException e){
System.out.print(e.getMessage());//这边打印
}
System.out.print(" bye");
}
}

A. bad
B. bad bye
C. OK bad
D. OK bad bye
9.下列说法中,不正确的是(B)。
A.一个 Java 源程序经过编译后,得到的文件的扩展名一定是.class。
B.一个 Java 源程序经过编译后,得到的结果文件数也只有一个。
C.一个 Java 源程序只能有一个 public class 类定义,且源文件的名字与 public class 的类
名相同,扩展名必须是.java。
D.一个 Java 源程序可以包含多个 class 类。
10.欲构造 ArrayList 类的一个实例,此类实现继承了 List 接口,下列方法正确的是(B)。
A.ArrayList myList = new Object();
B.List mylist = new ArrayList();
C.ArrayList myList = new List();
D.List myList = new List();
11.下列说法正确的是(AC)(多选)。
A.LinkedList 实现了继承自 List。
B.AbstractSet 继承自 Set。
C.HashSet 继承自 AbstractSet。
D.WeakMap 继承集成自 HashMap。
12.Thread 类用来创建和控制线程,一个线程从下面(B)方法开始执行。
A.init()
B.start()
C.run()
D.notifyAll()
13.下面关于 Java 语言实例方法和类方法的说法,正确的是(BC)(多选)。
A.实例方法可以直接通过类名调用。
B.类方法可以直接通过类名调用。
C.实例方法可以操作实例变量也可以操作类变量。
D.类方法可以操作实例变量也可以操作类变量。
14.在 Java 语言当中,(C)关键字用来实现同步。
A. native B. static C. synchronized D. abstract
15.以下关于 Java 的 List Set 和 Map 集合的描述,错误的是(BC)(多选)。
A) List 集合的元素是有序的,元素可以重复
B) HashSet 集合的元素是无序的,可以重复的;// 不能重复 TreeSet 是有序的,基于 TreeMap 实现

C) HashMap 的 Key 必须唯一,Value 同样不可以重复
D) LinkedList 线程不安全,它是链表结构
E) List 集合具有以下几种常用的方法:add(E e) clear() hashCode() iterator()
toArray()
16.正则表达式“\d+.?\d*”,在匹配下列字符串时结果失败的是(C)。
A.12.5 B.1.25 C.以上都成功 D.以上都失败

简答类题目

1.string、stringbuilder、stringbuffer 区别?stringbuilder、stringbuffer 哪个是线程不安全?

(1) 可变与不可变 (全答对得 3 分,错 1 个扣 1 分)
String 类中使用字符数组保存字符串,因为有“final”修饰符,所以可以知道 string 对象是不可变的。
private final char value[];
StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder
中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。
char[] value;
(2) 是否多线程安全 (答对得 3 分,错 1 个扣 1 分)
String 中的对象是不可变的,也就可以理解为常量,显然线程安全。
AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的
基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。
StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。源码如下:
public synchronized StringBuffer reverse() {
super.reverse();
return this;
}
StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
(3) 如果程序不是多线程的,那么使用 StringBuilder 效率高于 StringBuffer。

2. HashMap 和 Hashtable 有什么区别?

HashMap 和 Hashtable 都实现了 Map 接口,HashMap 几乎可以等价于 Hashtable。
区别:(答对 1 条得 1 分, 共 3 分)
(1) HashMap 非线程安全,HashTable 是线程安全的。Java 5 提供了 ConcurrentHashMap,
它是 HashTable 的替代,比 HashTable 的扩展性更好
(2) HashMap 可以接受为 null 的键值(key)和值(value),而 Hashtable 则不行。
(3) HashMap 的迭代器(Iterator)是 fail-fast 迭代器,而 Hashtable 的 enumerator 迭代器不是
fail-fast 的。
由于 Hashtable 是线程安全的,也就是 synchronized,所以在单线程环境下它比 HashMap 要
慢。如果不需要同步,只需要单一线程,那么使用 HashMap 性能要好过 Hashtable。

3.Array 和(ArrayList)有什么区别?什么时候应该使用 Array 而不是 ArrayList?

Array 长度不可调整,是固定长度的数组;而 Arraylist 底层是可随时插入时改变长度的数组。
(答对得 2 分)
Array 中存储的值必须时统一类型的,而 Arraylist 不受类型限制,每个索引上的值类型可以
不一致。同理可得知:当需要存储固定长度、类型一致的一组信息时,可以采取 array(答对
得 1 分)

4.Java 中创建线程哪几种方式?需要实现什么方法?优缺点是什么?

(1) 继承 Thread 类创建线程类,并重写该类的 run 方法,该 run()方法的方法体就代表了线
程要完成的任务。调用线程对象的 start()方法来启动该线程
(2) 实现 runnable 接口,并重写该接口的 run()方法,该 run()方法的方法体同样是该线程的
线程执行体。调用线程对象的 start()方法来启动该线程。
(3) 实现 Callable 接口,并实现 call()方法,该 call()方法将作为线程执行体,并且有返回值。
创建一个 Callable 实现类的实例对象,再使用 FutureTask 类来包装 Callable 对象,该
FutureTask 对象封装了该 Callable 对象的 call()方法的返回值
继承 Thread 类的优缺点
优点: 编写简单, 如果需要访问当前线程, 直接使用 this 即可获得当前线程, 无需使用
Thread.currentThread()方法
缺点: 线程类已经继承了 Thread 类, 不能继承其他类
实现 runnable 或者 Callable 接口的优缺点
优点: 线程类只是实现了接口, 还可以继承其他的类
缺点: 访问当前线程时, 需要使用 Thread.currentThread(0)方法

编程题部分

1.判断字符串是否存在(结果正确得 5 分)

public boolean stringContains(String A,String B){
	//编码区
	int i = A.indexOf(B);
	return i>0?true:false;
}
//判断每个数组是否存在
public boolean stringContains(String A,String B){
	//编码区
	//判断结果
	boolean b = true;
	//将带判断的小字符串转成字符数组,以遍历判断是否存在于大字符串中
	char []ch = B.toCharArray();
	for(char c:ch){
		if(A.indexOf(c)<0){
			b=false;
		}
	}
//返回结果
return b;
}

2.在排序的数组中,给定一个值,找出值对应的索引(结果正确得 5 分)

public int findIndex(int[] a,int value){
	//编码区
	int i;
		for(i=0;i<a.length;i++){
			if(a[i]==value){
				break;
			}
		}
	return i;
}

3. 给定一个整数数组 nums 和一个目标值 target,请你在该集合中找出和为目标值的那两个
整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案,但是不能重复利用
这个数组中同样的元素。(结果正确得 5 分)
示例:
给定 nums = [2,7,11,15],target=9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回[0,1]
public int[] twoSum(int[] num, int target){

public int[] twoSum(int[] num, int target){
	//编码区
	int [] res = new int[]{0,0};
	for(int i=0;i<num.length-1;i++){
		for(int j=i+1;j<num.length;j++){
			if(num[i]+num[j]==target){
					res[0] = i;
					res[1] = j;
					break;
				}
			}
			if (res[1]!=0){
				break;
			}
	}
	return res;
}

4.自定义集合(每种遍历方式为 2 分, 共 6 分)
List list = new ArrayList();
list.add(1);
list.add(‘a’);
list.add(“hello!”);
list.add(10.5);
1 .增强型 FOR 循环

for(Object o : list){
System.out.println(o);
}

2 .foreach()

list.forEach(n->{
System.out.println(n);
});

3 .iterator 迭代器

Iterator it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}

5.复制文件(结果正确得 5 分)

public static void main(String[] args) {
//待复制的文件
File file = new File("d:/dy.txt");
//临时存储在字符串中
StringBuffer sbuff=new StringBuffer();
//创建文件输入流对象
FileReader fr = null;
//创建缓冲流读取
BufferedReader bufrea=null;
try {
fr = new FileReader(file);
bufrea = new BufferedReader(fr);
String str="";
while ((str=bufrea.readLine())!= null){
sbuff.append(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufrea.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//重新写入文件
File newfile = new File("d:/dy 副本.txt");
if(!newfile.exists()){
try {
newfile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
//创建写入流
FileWriter fw = null;
BufferedWriter buffwr= null;
//写入文件
try {
fw = new FileWriter(newfile);
buffwr = new BufferedWriter(fw);
buffwr.write(sbuff.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
buffwr.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

二、数据库MySQL部分

选择题

1.已知表 T1 中有 2 行数据,T2 中有 3 行数据,执行语句”select a.* from T1 a, T2 b”后,返回
的行数为(D)。
A.2 行 B.3 行 C.5 行 D.6 行
3.在数据库中,表是一个非常重要的数据对象,它是用来ABCD A、显示 B、查询 C、存放 D、检索
4.选择要执行操作的数据库,应该执行的 SQL 命令是(A)。
A、USE B、GO C、EXEC D、DB

简答题

1. 谈谈你对事务的理解?(能说明出大致意思得 3 分)

为了业务需求,提高数据的安全性和执行一致性,将一组 SQL 命令加入事务,当事务
中任意一条语句报错时,执行 rollback 已达到已运行在内存中的命令行回滚至原始状态;

2. union 和 union all 的区别?(3 分)

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

3. when 和 having 的区别?(3 分)

where 是针对全文检索,having 是针对 GROUP BY 的小组过滤,where 执行效率更高

4. in 和 exists 的区别?(3 分, 答对两条即可)

(1) 运用情况不同
sql 中 in 适用于子查询得出的结果集记录较少,主查询中的表较大且又有索引的表,。sql
中 exist 适用于外层的主查询记录较少,子查询中的表大,又有索引的时候。
(2) 驱动顺序不同
IN 是先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。
exists 是以外层表为驱动表,先被访问。
(3) 对 NULL 值处理不同
IN 不对 NULL 进行处理,exists 会对 NULL 值进行处理。
(4) 底层原理不同
in 是把外表和内表作 hash 连接,而 exists 是对外表作 loop 循环,每次 loop 循环再对
内表进行查询。

5. char 和 varchar 的区别?(3 分)

CHAR 的长度是固定的,而 VARCHAR2 的长度是可以变化的

编程部分

把图1转换成图2结果展示
在这里插入图片描述
在这里插入图片描述

CREATE TABLE `TEST_TB_GRADE` (
  `ID` int(10) NOT NULL AUTO_INCREMENT,
  `USER_NAME` varchar(20) DEFAULT NULL,
  `COURSE` varchar(20) DEFAULT NULL,
  `SCORE` float DEFAULT '0',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into TEST_TB_GRADE(USER_NAME, COURSE, SCORE)  values
("张三", "数学", 34),
("张三", "语文", 58),
("张三", "英语", 58),
("李四", "数学", 45),
("李四", "语文", 87),
("李四", "英语", 45),
("王五", "数学", 76),
("王五", "语文", 34),
("王五", "英语", 89);

行转列:

SELECT user_name ,
    MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,
    MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,
    MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语
FROM test_tb_grade
GROUP BY USER_NAME;

三、大数据Hadoop部分

热门文章

暂无图片
编程学习 ·

Qt QTreeWidget的级联选中

在使用QTreeWidget显示文件树时,需要对树的节点做一些功能的限制:勾选某一节点时,该节点的子项自动全部选中 子项部分勾选时,父节点状态为部分勾选 子项全部勾选时,父节点自动设置勾选首先,查看了Qt文档,发现竟然没有提供这个功能,所以自己写了一个简单的例子。 先看效…
暂无图片
编程学习 ·

MapReduce详细分析

一、MapReduce概述 1、定义 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群 上。 2、MR进程 一个完整的MapR educe程序在分布式运行时有三类实例进程:**Mr AppMaster:**负责整个程序的过程调度及状态协调…
暂无图片
编程学习 ·

常用的Python爬虫工具列表分享

今天扣丁学堂小编为你详细的总结了一下关于Python视频教程之Python爬虫的工具列表都有哪些呢,而这个列表包含与网页抓取和数据处理的Python库,下面我们一起来看一下吧。 ​ 网络 urllib-网络库(stdlib)。 requests-网络库。 grab–网络库(基于pycurl)。 pycurl–网络库(绑…
暂无图片
编程学习 ·

从零开始学Python:第七课-关于分支和循环结构的应用

通过上两节课的学习,大家对Python中的分支和循环结构已经有了感性的认识。分支和循环结构的重要性不言而喻,它是构造程序逻辑的基础,对于初学者来说也是相对困难的部分。大部分初学者在学习了分支和循环结构后都能理解它们的用途和用法,但是遇到实际问题的时候又无法下手;…
暂无图片
编程学习 ·

Easyui网上书城前端界面

Easyui网上书城前端界面登录界面注册界面首页界面查询书籍界面购物车界面login.htmlregister.htmlindex.htmlsearch.htmlshopping.html 接上一篇博客. 首先,前端界面所需要的界面有 登录 注册 首页 查询书籍 购物车 登录界面注册界面首页界面查询书籍界面购物车界面login.html…
暂无图片
编程学习 ·

Portworx Essentials 视频讲解

Portworx Essentials vs. Portworx Enterprise:https://www.iqiyi.com/v_19rzfuk1yw.html欢迎回到Portworx讲解视频系列,我是Ryan Warner。今天我们来介绍一下Portworx Essentials版本,以及与Portworx Enterprise版本的区别。Portworx Essentials是在K8S上运行数据管理的最必…
暂无图片
编程学习 ·

python如何写数据到csv文件中

使用csv保存数据是一种非常常见的方式,csv数据也很方便移植到excel中去经常会遇到这样的问题,我有一百行数据一百列数据,我应该怎么快速放到excel里面去,我的答案是先保存到csv中,然后再复制粘贴到excel中。代码如下import csvresults_file = open(results.csv,w, newline…
暂无图片
编程学习 ·

mysql表碎片回收

1、alter table t engine = innodb;重建整个表,对于支持online ddl的版本,当线上进行操作的时候要调大innodb_online_alter_log_max_size参数,因为该参数会记录ddl过程中的dml操作,而此临时文件存放在临时排序区(innodb_sort_buffer_size),innodb_sort_buffer_size参数上…
暂无图片
编程学习 ·

linux 修改时间并永久生效

Centos系统,必须同时修改系统时间和硬件时间,才可以保证修改有效,单纯的使用date命令修改系统时间,是立即生效,重启后系统还原。具体操作如下:1.date {查看目前本地的时间}2.hwclock --show {查看硬件的时间}3.如果硬件时间和系统时间不同,那就对硬件的时间进行修改4.hw…
暂无图片
编程学习 ·

CSS 总结

一、CSS三大特性:层叠性、继承性、优先级 层叠性 层叠性:就近原则。 分两种情况:同类选择器,第二个选择器样式会覆盖第一个选择器样式。 在同一个选择器中,相同的属性会以最后一个为准。继承性 继承性:子承父业 特殊:a标签不受影响因为它又自己的特性 优先级 优先级选择…
暂无图片
编程学习 ·

Java ssm框架搭建实现登录

Java ssm框架搭建实现登录 准备工作 1、创建数据库 2、创建数据表 3、导入包4、创建相应的包和文件#UserDao和UserService为接口文件 编写各个文件 User public class User {private int id;private String name;private String password;public int getId() {return id;}publi…
暂无图片
编程学习 ·

项目实训——数据渲染数据引擎

项目实训——数据渲染数据引擎数据渲染layui卡片布局layui分页layui数据引擎遇到的问题 今天的任务就是要做出每个版块的页面。板块页面最重要就是数据的渲染。为了样式的统一,我继续使用layui,在这里用的是模板引擎laytpl。 数据渲染 layui卡片布局 为了美观,我使用了卡片式…
暂无图片
编程学习 ·

Java数据结构--顺序栈

一、简介 1.1 概念栈:又称为堆栈,是限制在表的一端进行插入和删除的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。 表中进行插入、删除操作的一端称为栈顶、栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底…
暂无图片
编程学习 ·

Java 中内部类简单概念

概念:在一个类内部定义的类 1.内部类会生成独立的.class文件。文件名Outer$Inner.class 2.内部类可以访问外部类的私有属性,从而不破坏外部类的封装性 成员内部类(类比成员变量) 1.定义位置:类以内,方法以外 2.如何创建对象 Outer o = new Outer(); //创建外部类对象 Out…
暂无图片
编程学习 ·

创建第一个 Flink 项目(Java版)

一、运行环境介绍Flink执行环境主要分为本地环境和集群环境,本地环境主要为了方便用户编写和调试代码使用,而集群环境则被用于正式环境中,可以借助Hadoop Yarn、k8s 或 Mesos等不同的资源管理器部署自己的应用。环境依赖:【1】JDK环境:Flink核心模块均使用 Java开发,所以…
暂无图片
编程学习 ·

MySQL在dos命令行中输入中文时报错

情景:在DOS命令行中操作中文时报错 insert into category(cid,cname) values(c010,中文); ERROR 1366 (HY000): Incorrect string value:\xB7\xFE\XD7\xB0 for colum cname at row 1原因:mysql的客户端设置编码是utf8,而系统的cmd窗口编码是gbk 解决:查看mysql内部设置的编…
暂无图片
编程学习 ·

Filebeat7.3基础运用

导言 项目主要是通过Filebeat读取日志文件,传输到Kafka上,Logstash获取Kafka的消息,过滤日志信息,传输到ElasticSearch上。实现数据的实时统计。楼主也是刚接触了ElasticSearch,有什么错误的,或者更好的操作,可以提供下,一起讨论。 1. 下载Filebeat的基础文件(根据自己…
暂无图片
编程学习 ·

linux下载源码并编译x264,x265并引用进FFmpeg

x264源码下载地址:https://www.videolan.org/developers/x264.html x265源码下载地址:https://www.videolan.org/developers/x265.html FFmpeg官网源码下载地址:http://ffmpeg.org/download.html FFmpeg默认支持H264的解码,但是并不支持H264的编码,如果想要让FFmpeg支持H2…
暂无图片
编程学习 ·

spring-cloud

网关限流算法 计数器 单位时间内,每次请求,计数器+1.当超过阀值,则之后请求拒绝.待单位时间过后,继续接受请求 漏桶算法 可理解为一个队列,在范围时间内的请求,都会通过漏洞向下执行.超过的请求,则抛弃感觉就跟ExcutorServer差不多,多余的任务则抛弃. 案例:百度网盘令牌桶算法 …
暂无图片
编程学习 ·

5D3无裁切5.4K电影24P RAW视频设置、拍摄、后期全流程

在写教程之前,首先感谢繁华,送我了我达芬奇加密狗,你也可以购买,使用起来和官方2600元的没任何区别(文章最后有购买链接)相当稳定不卡顿、不闪退、全插件无水印,由于之前的收费,非发给我红包,不要都不行。 言归正传。 凡是安装过此店(下面有购买链接)摩灯固件5D3中文…