Java循环查询数据库优化
1. static 和 final 的⽤法
static 的作⽤从三个⽅⾯来谈,分别是静态变量、静态⽅法、静态类。
静态变量:声明为 static 的静态变量实质上就是全局变量,当声明⼀个对象时,并不产⽣static 变量的拷贝,⽽是该类所有实例变量共⽤同⼀个 static 变量。也就是说这个静态变量只加载⼀次,只分配⼀块储存空间。
静态⽅法: 声明为static的静态⽅法有以下⼏个特点:
(1)静态⽅法只能调⽤静态⽅法;
(2)静态⽅法只能访问静态数据;
(3)静态⽅法不能以任何⽅式引⽤this或super;
静态类:通常⼀个普通类不允许声明为静态,只有⼀个内部类才可以(main⽅法就是⼀个典型),这时这个声明的静态类可以直接作为⼀个普通类来使⽤,⽽不需要实例⼀个外部类。
final 的作⽤从变量、⽅法、类三个⽅⾯来理解:
final修饰的变量的值不能被修改,是⼀个常量;
final修饰的⽅法不能被重写;
final修饰的类不能被继承;
2. 抽象类和接⼝的区别,类可以继承多个类吗,接⼝可以继承多个接⼝吗,类可以实现多个接⼝吗?
抽象类和接⼝都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象⽅法的⼦类对象,接⼝变量必须指向实现所有接⼝⽅法的类对象。
抽象类要被⼦类继承,接⼝要被类实现。
接⼝只能做⽅法声明,抽象类中可以做⽅法声明,也可以做⽅法实现
接⼝⾥定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
抽象类⾥的抽象⽅法必须全部被⼦类所实现,如果⼦类不能全部实现⽗类抽象⽅法,那么该⼦类只能是抽象类。同样,⼀个实现接⼝的时候,如不能全部实现接⼝⽅法,那么该类也只能为抽象类。
抽象⽅法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。
抽象类⾥可以没有抽象⽅法 。
如果⼀个类⾥有抽象⽅法,那么这个类只能是抽象类 。
抽象⽅法要被实现,所以不能是静态的,也不能是私有的。
接⼝可继承接⼝,并可多继承接⼝,但类只能单根继承。static修饰的变量
3. this和super的功能和⽤法
this :
(1) 能访问除构造⽅法以外所有的属性、⽅法,通过this.来调⽤⽅法和属性
(2) 不可以在静态⽅法中使⽤
(3) 在构造⽅法中使⽤this(参数列表) 调⽤本类的其它构造⽅法,必须放在构造⽅法的第⼀句。
super :访问⽗类的⽅法和属性
(1) 访问⽗类的⽅法和属性;
(2) 在构造⽅法中通过 super(参数列表) 来调⽤⽗类的构造⽅法,必须放在⼦类构造⽅法⾥的第⼀⾏。
4. final, finally, finalize 的区别?
final:修饰符(关键字)有三种⽤法:如果⼀个类被声明为final,意味着它不能再派⽣出新的⼦类,即不能被继承。将变量声明为final,可以保证它们在使⽤中不被改变,被声明为final 的变量在初始化以后的引⽤中只能读取不可修改。被声明为 final 的⽅法也同样只能使⽤,不能在⼦类中被重写。
finally:通常放在try…catch的后⾯构造总是执⾏代码块,这就意味着程序⽆论正常执⾏还是发⽣异常,这⾥的代码只要JVM不关闭都能执⾏,可以将释放外部资源的代码写在finally块中。
finalize:Object类中定义的⽅法,Java中允许使⽤finalize() ⽅法在垃圾收集器将对象从内存中清除出去之前做必要的清理⼯作。这个⽅法是由垃圾收集器在销毁对象时调⽤的,通过重写finalize() ⽅法可以整理系统资源或者执⾏其他清理⼯作。
5. Error 和 Exception 有什么区别?
Error 表⽰系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的⼀种严重问题;⽐如内存溢出,不可能指望程序能处理这样的情况;
Exception 表⽰需要捕捉或者需要程序进⾏处理的异常,是⼀种设计或实现问题;也就是说,它表⽰如果程序运⾏正常,从不会发⽣的情况。
6. 说出Servlet的⽣命周期,并说出Servlet和CGI的区别。
Servlet被服务器实例化后,容器运⾏其init⽅法,请求到达时运⾏其service⽅法,service⽅法⾃动派遣运⾏与请求对应的doXXX⽅法(doGet,doPost)等,当服务器决定将实例销毁的时候调⽤其destroy()⽅法。
与CGI的区别在于Servlet处于服务器进程中,它通过多线程⽅式运⾏其service⽅法,⼀个实例可以服务于多个请求,并且其实例⼀般不会销毁,⽽CGI对每个请求都产⽣新的进程,服务完成后就销毁,所以效率上低于Servlet。
7. 如何防⽌缓存雪崩?
原因:
缓存雪崩可能是因为数据未加载到缓存中,或者缓存同⼀时间⼤⾯积的失效,从⽽导致所有请求都去查数据库,导致数据库CPU和内存负载过⾼,甚⾄宕机。
对应解决:
采⽤加锁计数,或者使⽤合理的队列数量来避免缓存失效时对数据库造成太⼤的压⼒。这种办法虽然能缓解数据库的压⼒,但是同时⼜降低了系统的吞吐量。
分析⽤户⾏为,尽量让失效时间点均匀分布。避免缓存雪崩的出现。
如果是因为某台缓存服务器宕机,可以考虑做主备,⽐如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。
8. 谈谈你对MVC的理解
MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是⼀种设计模式,它强制性的把应⽤程序的输⼊、处理和输出分开。
MVC中的模型、视图、控制器它们分别担负着不同的任务。
视图: 视图是⽤户看到并与之交互的界⾯。视图向⽤户显⽰相关的数据,并接受⽤户的输⼊。视图不进⾏任何业务逻辑处理。
模型: 模型表⽰业务数据和业务处理,相当于JavaBean。⼀个模型能为多个视图提供数据。这提⾼了应⽤程序的重⽤性。
控制器: 当⽤户单击Web页⾯中的提交按钮时,控制器接受请求并调⽤相应的模型去处理请求,然后根据处理的结果调⽤相应的视图来显⽰处理的结果。
MVC的处理过程:⾸先控制器接受⽤户的请求,调⽤相应的模型来进⾏业务处理,并返回数据给控制器。控制器调⽤相应的视图来显⽰处理的结果。并通过视图呈现给⽤户。
最后
俗话说,好学者临池学书,不过⽹络时代,对于⼤多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,⽐如看到对⾃⼰⽅向发展有⽤的信息,先收藏⼀波是⼀波,⽐如如果你觉得我这篇⽂章ok,先点赞收藏⼀波。这样,等真的沉下⼼来学习,不⾄于被资料分散了⼼神。慢慢来,先从点赞收藏做起,加油吧!
好啦,由于⽂章篇幅限制,⾯试题答案详解我就不在这⾥展⽰出来了,
另外,给⼤家安排了⼀波学习⾯试资料:
/java-p7)**
另外,给⼤家安排了⼀波学习⾯试资料:
[外链图⽚转存中…(img-m3fEZzAt-1627471393485)]
[外链图⽚转存中…(img-iHq6oVM3-1627471393488)]
以上就是本⽂的全部内容,希望对⼤家的⾯试有所帮助,祝⼤家早⽇升职加薪迎娶⽩富美⾛上⼈⽣巅峰!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论