创建数组
int[] arr=new int[6];
int[] arr=new int[array.size()] ;
数组排序
int nums[]
Arrays.sort(nums)
数组求长度
nums.length
求char[] a 长度
a.length
定位
a[i]
比较两个数组是否相等
Arrays.equals(ary, ary1))
获取其长度
s.length()
定位某个元素
s.charAt(i)
字符串转char
s.toCharArray()
创建
ArrayList<Integer> arrayList = new ArrayList<>();
添加
arrayList.add(1);
arrayList.add(2);
拿出元素
arrayList.get(i);
排序
Collections.sort(arrayList);
反转列表
Collections.reverse(array2);
判断两个列表的值是否相等
array.equals(array2);
创建
HashSet<Integer> hashset = new HashSet<>();
添加
hashset.add(1);
创建
HashMap<Character,Integer> hash = new HashMap<Character,Integer>();
插入
hash.put('a',1);
得到键对应的值
hash.get('a')
判断连个hashmap是否相等
hash.equals(hash2)
遍历 (增强for)keySet 和 EntrySet
for(HashMap.Entry<Character,Integer> i:hash)
{
System.out.println(i.getKey()+i.getValue());
System.out.println(i);
}
for (Character i:hash.keySet())
System.out.println(i+ hash.get(i))
IOC
IoC 的话就是控制反转,控制包括对象创建、属性赋值、对象生命周期的管理。
反转就是把开发人员管理对象的权限转移给了代码之外的容器来实现,由容器来完成对对象的管理。
资源集中管理,实现资源的可配置和易管理。
AOP
AOP翻译过来是:面向切面编程。他是一种设计思想。主要由连接点,切点,增强、切面组成。它用于将那些与业务无关,但却对多个对象产生影响的公共行为的,比如说权限认证、日志、事务处理。抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),它可以减少系统中的重复代码,降低了模块间的耦合度,同时捉高了系统的可维护性。
切入点:位置+行为
切面: 位置 +通知 ( 在什么地方, 干什么事情)
织入:切面在代码执行的时候生效
AOP的实现方式
AOP有两种实现方式:静态代理和动态代理
什么是线程安全
线程安全指的是内存的安全,在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。进程内的所有线程都可以访问到该区域,由于在堆内存中的数据由于可以被任何线程访问到,在没有限制的情况下存在被意外修改的风险。即堆内存空间在没有保护机制的情况下,对多线程来说是不安全的地方,因为你放进去的数据,可能被别的线程“破坏”
哪些集合类是线程安全
Vector(向量)
Stack(栈)
Hashtable
java.util.concurrent包下所有的集合类
hashset 与 treeset 区别
一、实现方式
HashSet:HashSet是哈希表实现的。
TreeSet:TreeSet是二差树实现的。
二、数据是否有序
HashSet:HashSet中的数据是无序的。
TreeSet:Treeset中的数据是自动排好序的。
三、是否可以放入null值
HashSet:可以放入null,但只能放入一个null。
TreeSet:不允许放入null值。
hashset
无索引、无序的、不能存储重复元素。
介绍
面试官你好,我叫X,来自xxxx,研究生毕业于xxx大学软件工程专业。研究生期间我的研究方向为数据挖掘方向。我的研究课题是基于深度学习的冠心病风险分层。研究生期间的主要课程包括,高级数据结构,高级计算机网络,工程伦理等。在学生活动方面,我参加过青年志愿者服务社,主要工作是负责组织学校内的青年志愿活动,比如组织同学去养老院等一些公益活动。前掌握的机器学习算法包括K-邻近算法,决策树,随机森林,XGboost,TabNet。熟悉的开发技术栈包括vue和spring boot,redis。在空闲的时候会看看CSDN博客,或者跑步骑行等。面试官,我的大致情况就是这样。
JDK、JRE、JVM之间的区别
JDK是java的标准开发包,它提供了编译、运行java程序所需的各种工具和资源,包括java编译器,java运行时环境,以及java常见的类库。
JRE是,java的运行环境,JRE包括了JVM和JVM工作所需要的类库,普通用户只需要安装JRE来运行java程序
JVM是java虚拟机,是JRE的一部分,他是整个java平台最核心的部分,负责运行字节码文件。
== 和 equals 的区别
== 如果是比较基本数据类型,判断它的值是否相等。如果是引用类型,就是比较它的地址。
equals用来比较两个对象的内容是否相等
重写和重载的区别
定义不同:重载是定义相同的方法名、参数不同,重写是子类重写父类的方法
范围不同:重载是在一个类中,重写是子类与父类之间的
参数不同:重载的参数个数、参数类型、参数的顺序可以不同,重写父类子方法参数必须相同
list 和 set的区别
list:有序,按对象进入的顺序保存对象,可重复,可以允许多个null元素对象的,可以使用iterator取出所有元素,
再逐一遍历,还可以使用get(index) 获取制定下标的元素。
set:无序,不可重复,最多允许有一个null元素对象,取元素时,只能用Iterator获得所有元素,在逐一遍历各个元素
arraylist和linkedlist的区别
1首先他们的底层数据结构不同,arraylist底层是基于数组实现,linkedlist底层是基于链表实现,
2由于底层的数据结构不同,他们所适合的场景也不同,arraylist更适合随机查找,linkedlist更适合删除、添加
mysql的存储引擎
就是表处理器: 对表进行增删改查操作
hashmap和 hashtable的区别
hashmap 没有synchronized 修饰,线程不安全,hashtable线程安全
hashmap允许key和value为null,hashtable不允许
String, Stringbuffer,stringbuilder 的区别
1、string是不可改变的,如果尝试修改,会生成一个新的字符串对象,StringBuffer 和 StringBulider是可改变的
2、StringBuffer是线程安全,StringBulider是线程不安全,因此单线程的情况下StringBulider的效率较高
守护线程
线程可以分为两种,用户线程和守护线程,用户线程就是普通线程,守护线程就是JVM的后台线程,
比如这个垃圾回收机制就是一个守护线程。守护线程会在其他普通线程都停止运行之后自动关闭
spring 于 springboot的区别
spring 是一个开源容器框架,可以配置各种bean,和维护bean与bean之间的关系,
它的核心就是控制反转IOC和面向切面AOP。简单的说就是一个分层的轻量级开源框架。
spring boot是为了简化 spring 应用的创建、运行、调试、部署等出现,
我们使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置,一句话的就是约定大于配置。
序列化于反序列化
序列化:保证对象的完整性和可传递性。对象转换为有序的字节流。
反序列化:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。
装箱:基本类型转变为包装器类型的过程。
拆箱:包装器类型转变为基本类型的过程。
hashcode()
java常见的基本数据类型
int float double char long boolean byte short
什么是构造方法
构造方法的名字和类的名字要相同,大小写字母也要一样。
(2)构造方法不能有返回值类型。
(3)在构造方法体中也不能用return返回一个值。
(4)主要作用是用于对象的初始化
(5)在创建对象时系统自动调用,不能再代码中显示的调用
(6)一个类中可以定义多个构造方法(参数序列要有明显的区别,这样才好区分具体用哪个)
(7)类中不定义构造方法时,系统会自动为该类生成一个没有参数的构造方法。
接口和抽象类的区别
1、抽象类
普通类和抽象类有哪些区别
线程创建的四种方式
finally语句一定执行嘛
Object
Java的每个类,都默认继承Object类
Object类常见方法:
hashcode()
equals()
clone()
wait()
notify()
唤醒在该对象上等待的某个线程
什么是spring MVC
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,
将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合
符号 # 和 $ 的区别
1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},
当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id ='1'.
2 $是将传入的数据直接显示生成sql语句,eg:select id,name,age from student where id =${id},
当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.
get 和 post 的区别
1.GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中。
2.GET请求比POST请求更不安全,因为参数直接暴露在URL中,所以,GET请求不能用来传递敏感信息。
3.GET请求在url中传递的参数是有长度限制的(在HTTP协议中并没有对URL的长度进行限制,
限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。POST对长度没有限制。
4.GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。
5.GET请求进行url编码(百分号编码),POST请求支持多种编码方式。
6.GET请求产生的URL地址是可以被bookmark(添加书签)的,POST请求不可以。
7.GET请求在浏览器回退的时候是无害的,POST请求会.再次提交数据。
8.GET请求在浏览器中可以被主动cache(缓存),而POST请求不会,可以手动设置。
nio
Java NIO主要解决了Java IO的效率问题
NIO全称是no-blocking io(或者New IO) 非阻塞IO
NIO是面向缓冲区的