java岗面试准备(二)

Collection.sort()底层用的什么排序方法
Collections.sort()的底层实质是是调用Arrays.sort();
归并+插入排序(TimSort):当数组元素少于64个时,那么运行的最小长度便是数组的长度,这是Timsort用插入排序算法来排序。当数组元素大于等于63时,对于较大的阵列中,从32到65的范围内选择一个称为minrun的数,使得阵列的大小除以最小游程大小,等于或略小于2的幂

Comparable和comparetor
comparable中有compareTo(Object obj)方法用来比较
comparator有一个compare(Object obj1, Object obj2)方法用来比较

Jvm的内存模型
https://blog.csdn.net/u011972171/article/details/80398771
在这里插入图片描述
说一下虚拟机的分区,计数区的作用,虚拟机栈里放的是什么
虚拟机栈(JVM Stack): 描述的是java方法执行的内存模型:每个方法被执行的时候都会创建一个"栈帧",用于存储局部变量表(包括参数)、操作栈、方法出口等信息。每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。声明周期与线程相同,是线程私有的。
程序计数器:是最小的一块内存区域,它的作用是当前线程所执行的字节码的行号指示器,在虚拟机的模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处理、线程恢复等基础功能都需要依赖计数器完成。

Jvm调整堆大小?
-Xms xxm为设置初始大小; -Xmx xxm为设置最大空间大小

你用过哪些集合?
Arraylist(数组) 与 LinkedList(双向链表)
List:对付顺序的好帮手
List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象
Set:注重独一无二的性质
不允许重复的集合。不会有多个元素引用相同的对象。
Map:用Key来搜索的专家

谈谈hashmap的扩容
https://blog.csdn.net/pange1991/article/details/82347284
当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值—即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。方法是使用一个新的数组代替已有的容量小的数组
HashMap原理
https://zhuanlan.zhihu.com/p/21673805
JDK1.8 之前 HashMap 底层是 数组和链表 。HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。
在这里插入图片描述
JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。

HashMap和HashTable 的区别
(1)线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过 synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);
(2)效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它;
(3)对Null key 和Null value的支持: HashMap 中,null 可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为 null。。但是在 HashTable 中 put 进的键值只要有一个 null,直接抛出 NullPointerException。
(4)初始容量大小和每次扩充容量大小的不同 : ①创建时如果不指定容量初始值,Hashtable 默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap 默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。②创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为2的幂次方大小(取余(%)操作中如果除数是2的幂次则等价于与其除数减一的与(&)操作(也就是说 hash%length==hash&(length-1)的前提是 length 是2的 n 次方)(HashMap 中的tableSizeFor()方法保证,下面给出了源代码)。也就是说 HashMap 总是使用2的幂作为哈希表的大小,后面会介绍到为什么是2的幂次方。
(4)底层数据结构: JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。

为什么java中只有值传递
Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量的内容。

.== 和 equal() 有什么区别
== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型== 比较的是值,引用数据类型比较的是内存地址)
equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“
”比较这两个对象。
情况2:类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
String中的equals方法是被重写过的,因为object的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值。

你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?
(原生)的hashCode值是根据内存地址换算出来的一个值。
(原生)的equals方法是严格判断一个对象是否相等的方法(object1 == object2)。
如果只重写了equals方法而没有重写hashCode方法的话,则会违反通用约定:相等的对象必须具有相等的散列码(hashCode)

​ 防SQL注入的原理是怎么样的

计算机网络

1.OSI七层模型,TCP/IP四层模型
链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡
网络层(互联网层):处理分组在网络中的活动,比如分组的选路。
运输层:主要为两台主机上的应用提供端到端的通信。
应用层:负责处理特定的应用程序细节。

​ 2.TCP和UDP区别
https://www.cnblogs.com/steven520213/p/8005258.html
​ 3.TCP三次握手和四次挥手,一定要三次挥手不行吗?

​ 4.网络请求的过程
https://blog.csdn.net/u014600626/article/details/78720763
域名解析,根据域名拿到的ip地址发起tcp三次握手,建立tcp连接后,浏览器发起http请求,服务器响应http请求,浏览器得到HTML代码,
​ 5.介绍一下http和https,https原理是什么
https://www.cnblogs.com/zhenguoli/p/8622933.html
​ 6.http头信息是怎么样的
https://blog.csdn.net/u014600626/article/details/78720763

操作系统

  1. 线程生命周期
    在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。
    新建状态,当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值
    就绪状态,当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行
    运行状态,如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态
    阻塞状态,当处于运行状态的线程失去所占用资源之后,便进入阻塞状态

  2. 在线程的生命周期当中,线程的各种状态的转换过程
    在这里插入图片描述

  3. Java怎么来实现线程安全的

  4. 线程和进程,线程怎么通信,进程间怎么通信
    进程:管道、消息队列、信号量、共享内存、套接字
    线程:锁机制,信号量

  5. IO类型有哪些?同步阻塞,异步阻塞

数据结构

​ 1.介绍一下都有哪些排序算法

​ 2.快速排序和归并排序时间复杂度都一样,为什么要用快速排序

​ 3.abcdef….英文字母排序,要怎么做

​ 4.流排序和计数排序
.Mysql索引,面试官写了一条sql语句,问使用到了哪些索引,为什么
https://blog.csdn.net/derrantcm/article/details/51534411

SSM

https://www.jianshu.com/p/231a582d2a02
https://blog.csdn.net/weixin_39801925/article/details/80585758
AOP
IOC
SpringMVC
Spring
Mybatis

常见的Linux系统命令

以面试经验来看,面试官问题在精不在多,所以不如针对一个方向搞清楚有利

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值