Java最新java和javaee面试常用大全,面试字节跳动Java工程师该怎么准备

最后我们该如何学习?

1、看视频进行系统学习

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

2、读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

Spring源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Mybatis 3源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Redis学习笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Spring Boot核心技术-笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

3、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

===========================

1、什么时候用静态变量 静态方法?为什么要使用静态变量、静态方法?

=================================

他们是全局的,那么走到哪里都可以使用。而是使用很方便。static全局变量只在声明此static全局变量的文件中有效;普通全局变量对整个源程序都有效,当此源程序包含多于一个文件的程序时,对其他文件依然有效。

static局部变量的存储区为静态存储区,普通局部变量的存储区为栈;

static局部变量生存周期为整个源程序,但是只能在声明其的函数中调用

static全局变量只在声明此static全局变量的文件中有效;

普通全局变量对整个源程序都有效,当此源程序包含多于一个文件的程序时,对其他文件依然有效。

2、变量,常量,静态变量存储的位置

常见的存储区域:1、栈2、堆4、全局/静态存储区5、常量存储区

由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。

由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,程序会一直占用内存,导致内存泄漏,在程序结束后,操作系统会自动回收。

全局/静态存储区

全局变量和静态变量被分配到同一块内存中,全局变量又分为初始化的和未初始化的。

常量存储区

这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改

3、子类中如何调用父类中被重写的方法


通过反射进行。可以在运行时调用任意一个对象的方法

Class cls = Class.forName(“com.jdk”);

Methods methods[]= cls.getDecliedMethod();

jdk jdkobj = new jdk();

String returnvalue = methods.invoke(jdkobj,null)

4、java反射机制应用场景

在运行时判断任意一个对象所属的类。

Class cls = Class.forName(“com.jdk”);

返回true

System.out.print(cls.isInstance(new jdk()));

在运行时构造任意一个类的对象。

Class cls = Class.forName(“com.jdk”);

jdk jdkobj = cls.newInstance();

在运行时判断任意一个类所具有的成员变量和方法。

Class cls = Class.forName(“com.jdk”);

Methods methods[]= cls.getDecliedMethod();

Fields  fields[] = cls.getDeclieredFields();

5、各种编码方式及区别?


ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符。

即读取文件时,

若为unicode(iso)时,前两个字节可以不用读取。注:固定是两个字节一个字。

Java用unicode编码,也就是用16位来编写一个字符。

utf8:用三个字节来编码一个中文字符。

.Java源文件(含有中文的话)是用:GBK编码。

ASSCII:每个字符存储是需占用1个_字节_。

6、什么是tcp/ip协议,什么是三次握手?


TCP为传输控制协议,IP为网际协议,是网络层最重要的协议。采用TCP/IP协议通过互联网传送信息可减少网络中的传输阻塞,方便大批量的数据在网上传输,从而提高网络的传输效率。

第一次握手:建立连接时,客户端发送syn包(syn=j是TCP/IP建立连接时使用的握手信号)到服务器,并进入SYN_SENT状态,等待服务器确认;第二次握手服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

7、请求方法有哪些种呢?


GET: 完整请求一个资源 (常用)

HEAD: 仅请求响应首部(向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息)

POST:提交表单(常用)

PUT: 上传(向指定资源位置上传其最新内容)

DELETE:删除(请求服务器删除Request-URI所标识的资源)

TRACE 回显服务器收到的请求,主要用于测试或诊断

8、如何实现跨域访问?


后台代理方式 :也就是将后台作为代理,每次对其它域的请求转交给本域的后台,本域的后台通过模拟http请求去访问其它域,再将返回的结果返回给前台,这样做的好处是,无论访问的是文档,还是js文件都可以实现跨域。

基于iframe实现跨域 :两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain = “xx.com”;

基于script标签实现跨域 :动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件

使用window.name来进行跨域数据共享。window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限。

9、主键和索引的区别?


主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录.;使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。

添加索引:ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

10、存储过程使用?


sql存储过程及应用:存储过程(StoredProcedure),是一组为了完成特定功能的SQL 语句。存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。因为应用程序源代码只包含存储过程的调用语句,从而极大地提高了程序的可移植性。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析优化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。

11、Web 服务器性能与站点访问性能优化思路


增加带宽,尽可能多地使用静态内容(_静态网页_是相对于_动态网页_而言,是指没有后台数据库、不含程序和不可交互的网页),多台服务器负载均衡同时处理大量的并发访问,减少网页中的 HTTP 请求数。

12、负载均衡及算法

负载均衡,其意思就是分摊到多个操作单元上进行执行,例如Web服务器FTP服务器企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

算法:

随机:负载均衡方法随机的把负载分配到各个可用的服务器上

轮询:轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。

加权轮询:该算法中,每个机器接受的连接数量是按权重比例分配的。

最快算法:最快算法基于所有服务器中的最快响应时间分配连接。

最少连接:系统把新连接分配给当前连接数目最少的服务器

多个服务器间数据共享:session复制。tomcat的session复制使所有节点tomcat的会话相同,tomcat使用组播技术,只要集群中一个tomcat节点的session发生改变,会广播通知所有tomcat节点发生改变。

13、高并发量网站解决方案


**HTML静态化、图片服务器分离、数据库集群、库表散列(**在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。),**缓存(),负载均衡,**CDN(分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度)。

14、java的垃圾回收机制(如何确定某个对象是“垃圾”?)。


Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身。

在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。

由于它们互相引用对方,导致它们的引用计数都不为0,那么垃圾收集器就永远不会回收它们。解决方案:在Java中采取了可达性分析法(该方法的基本思想是通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了。)如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。

15、单例设计模式的实现?


饿汉式是(静态初始化对象)线程安全的,因为虚拟机保证只会装载一次,在装载类的时候是不会发生并发的。

懒汉式也是可以实现线程安全的,只要加上synchronized即可,但是这样一来,会降低整个访问的速度,而且每次都要判断。可以使用"双重检查加锁"的方式来实现,就可以既实现线程安全,又能够使性能不受到很大的影响。并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法过后,先检查实例是否存在,如果不存在才进入下面的同步块,这是第一重检查。进入同步块过后,再次检查实例是否存在,如果不存在,就在同步的情况下创建一个实例,这是第二重检查。这样一来,就只需要同步一次了,从而减少了多次在同步情况下进行判断所浪费的时间。

懒汉式:”双重检查加锁”

public class Singleton {

/**

  • 对保存实例的变量添加volatile的修饰

*/

private volatile static Singleton instance = null;

private Singleton(){

}

public static Singleton getInstance(){

//先检查实例是否存在,如果不存在才进入下面的同步块

if(instance == null){

//同步块,线程安全地创建实例

synchronized(Singleton.class){

//再次检查实例是否存在,如果不存在才真正地创建实例

if(instance == null){

instance = new Singleton();

}

}

}

return instance;

}

}

资源利用率高,不执行getInstance()就不会被实例,可以执行该类的其他静态方法

 

缺点

第一次加载时不够快,多线程使用不必要的同步开销大

22.

饿汉式:

publicclass Singleton1 {

private Singleton1() {

}

publicstatic Singleton1 instance = new Singleton1();

public Singleton1 getInstance() {

return instance;

}

}

优点:1.线程安全

2.在类加载的同时已经创建好一个静态对象,调用时反应速度快

缺点:资源效率不高,可能getInstance()永远不会执行到,但执行该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化

解决方案:

.静态内部类

class Singleton5 {

private Singleton5() {

}

privatestaticclass SingletonHelp {

static Singleton5 instance = new Singleton5();

}

publicstatic Singleton5 getInstance() {

return SingletonHelp.instance;

}

}

资源利用率高,不执行getInstance()不被实例,可以执行该类其他静态方法

 

缺点

第一次加载时反应不够快

16、对设计模式的理解以及使用场景?


单例模式:确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例,如网站的计数器,数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。多线程的线程池的设计。

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

16、对设计模式的理解以及使用场景?


单例模式:确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例,如网站的计数器,数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。多线程的线程池的设计。

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
[外链图片转存中…(img-UvztyvAA-1715376273714)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值