Redis目前还在看,今天来分享一下我在秋招看过(遇到)的一些面试题(相对比较常见的)
简要说一下final关键字,final可以用来修饰什么?
这题我是在真实的面试中遇到的,当时答得不太好,现在来整理一下吧。
final可以修饰类、方法、成员变量
你有没有这样的编程经验,在编译器写代码时,某个场景下一定要将变量声明为final,否则会出现编译不通过的情况。为什么要这样设计?
在编写匿名内部类的时候就可能会出现这种情况,匿名内部类可能会使用到的变量:
其中我们可以看到:方法或作用域内的局部变量和方法参数都要显示使用final关键字来修饰(在jdk1.7下)!
如果切换到jdk1.8编译环境下,可以通过编译的~
下面我们首先来说一下显示声明为final的原因:为了保持内部外部数据一致性
为什么仅仅针对方法中的参数限制final,而访问外部类的属性就可以随意
内部类中是保存着一个指向外部类实例的引用,内部类访问外部类的成员变量都是通过这个引用。
那当你在匿名内部类里面尝试改变外部基本类型的变量的值的时候,或者改变外部引用变量的指向的时候,表面上看起来好像都成功了,但实际上并不会影响到外部的变量。所以,Java为了不让自己看起来那么奇怪,才加了这个final的限制。
三个线程分别打印A,B,C,要求这三个线程一起运行,打印n次,输出形如“ABCABCABC…”的字符串。
原博主给出了4种方式,我认为信号量这种方式比较简单和容易理解,我这里粘贴一下(具体的可到原博主下学习)…
在不少的面经都能看到它的身影哈~~~基本都是要求能够手写代码的。
其实逻辑并不难,概括起来就两句话:
基于原作者的代码,我修改了部分并给上我认为合适的注释(下面附上了原作者出处,感兴趣的同学可到原文学习)
另外,上面原文中也说了可以使用阻塞队列来实现消费者和生产者。这就不用我们手动去写wait/notify
的代码了,会简单一丢丢。可以参考:
我现在需要实现一个栈,这个栈除了可以进行普通的push、pop操作以外,还可以进行getMin的操作,getMin方法被调用后,会返回当前栈的最小值,你会怎么做呢?你可以假设栈里面存的都是int整数
但是,如果一直push的值是最小值,那我们的mins辅助栈还是会有大量的重复元素,此时我们可以使用索引(mins辅助栈存储的是最小值索引,非具体的值)!
众所周知,HashMap不是一个线程安全的类。但有可能在面试的时候会被问到:如果在多线程环境下使用HashMap会有什么现象发生呢??
put()
的时候导致的多线程数据不一致(丢失数据)
resize()
操作会导致环形链表
G1收集器的设计目标是取代CMS收集器,它同CMS相比,在以下方面表现的更出色:
海量数据的处理也是一个经常考的知识点,无论在面试还是在笔试中都是比较常见的。有幸读了下面的文章,摘录了一些解决海量数据的思路:
昨天去做了一套笔试题,经典的HTTP中get/post
的区别。今天回来搜了一下,发现跟之前的理解有点出入。
如果一个人一开始就做Web开发,很可能把HTML对HTTP协议的使用方式,当成HTTP协议的唯一的合理使用方式。从而犯了以偏概全的错误
单纯以HTTP协议规范来说,可能我们之前总结出的GET/POST
区别就没用了。(但通读完整篇文章,我个人认为:如果面试中有GET/POST
区别,还是默认以Web开发场景下来回答较好,这也许是面试官想要的答案)
其中也学习到了幂等性这么一个概念,于是也做做笔记吧~~~
从定义上看,HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。
GET
是幂等的,无副作用
http://localhost/order/2
,使用GET
多次获取,这个ID为2的订单(资源)是不会发生变化的!
http://localhost/order/2
,使用PUT/DELETE
多次请求,这个ID为2的订单(资源)只会发生一次变化(是有副作用的)!但继续多次刷新请求,订单ID为2的最终状态都是一致的
POST
是非幂等的,有副作用的
http://localhost/order
,使用POST
多次请求,此时可能就会创建多个名称为3y的订单,这个订单(资源)是会多次变化的,每次请求的资源状态都会变化!
HTTP协议本身是一种面向资源的应用层协议,但对HTTP协议的使用实际上存在着两种不同的方式:一种是RESTful的,它把HTTP当成应用层协议,比较忠实地遵守了HTTP协议的各种规定(充分利用了HTTP的方法);另一种是SOA的,它并没有完全把HTTP当成应用层协议,而是把HTTP协议作为了传输层协议,然后在HTTP之上建立了自己的应用层协议
在查阅资料的时候,可以发现很多博客都讲了接口的幂等性。从上面我们也可以看出,POST
方法是非幂等的。但我们可以通过一些手段来令POST
方法的接口变成是幂等的。
说了那么多,那接口设计成幂等的好处是什么????
举个例子说一下非幂等的坏处:
如果我的抢课接口是幂等的话,那就不会出现这个问题了。因为幂等是多次请求某一个资源应该具有同样的副作用。
说白了,设计幂等性接口就是为了防止重复提交的(数据库出现多条重复的数据)!
网上有博主也分享了几条常见解决重复提交的方案:
如果以上有理解错的地方,或者说有更好的理解方式,希望大家不吝在评论区下留言。共同进步!