java超难的面试题,求大神帮忙!

xulianzhen 2015-04-27 04:07:49
今天遇到一个大公司的面试题,java的,面挂了,求帮忙!
1. 已知一个单链表上有一个节点为数字N,如何快速定位到这个节点并在它的前面插入另一个节点。不能使用遍历,面试官说遍历太慢了,,,
2. 已知有程序操作如下一张表,程序会不定时的去刷新这个表某几行的time为系统当前时间(当然这个表的行数不是固定的,也可能程序去增加或删除)。现在要求写另一个程序,这个程序只能5分钟扫描这张表,如果发现某一行的time已经超过5分钟没有去刷新了,就将state置为“已超时”。如何不用每次都遍历整张表且快速的完成这件事?
id time state
1 9:36
2 8:20 已超时
3 9:32
3. 多个线程去访问某个单例bean,如何设计这个bean,使得多个线程从这个bean中能得到属性日期date,保证不同的线程访问bean得到不同的date,同一个线程访问这个bean又能得到相同的date?
4. 已知一个SQL去查询一张表发现速度好慢,在不改动SQL的条件下如何去分析这个问题(其中索引也建的没有问题)?
5. 我本地想访问第三方的类对象的方法,我手头上没有第三方类的对象,只有接口,如何能实现访问?我说采用类似于jdk里面带的动态代理,貌似对了但是整个思路我还是不懂。
6. 采用负载均衡集群的方式部署了多个tomcat,如何管理session和缓存使得session中的数据和缓存中数据能实时更新?其中缓存我说采用分布式并利用通知的方式,感觉面试官表情好像不对,,,
7. 现在只有4个服务器,每个服务器并发量各40万,突然瞬间会达到1个亿的访问量,该怎么应对或者提前如何部署?
8. Struts2是多例的,比起Struts1和servlet单例的,每次请求都要创建和用户状态有关的对象,Struts2的优势在哪里?
9. 和银行交互时要么调用接口或者发送报文,要用到签名,签名的算法是公开的么?为什么?


第一次发帖,有点啰嗦,,,烦请各路大神拯救啊!
...全文
1587 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
永远的目标 2016-12-28
  • 打赏
  • 举报
回复
大神把这9个题的正确答案贴出来啊,让我们大家学习学习啊
永远的目标 2016-12-28
  • 打赏
  • 举报
回复
大神这是杭州哪家公司的面试题啊?
xulianzhen 2015-04-30
  • 打赏
  • 举报
回复
面试官说第5题要自己实现,不能使用第三方工具
nature502 2015-04-30
  • 打赏
  • 举报
回复
第一题我的想法是:查找一个链表的时间复杂度是O(n), 只有hash算法才能是O(1). 将链表的每个Node,通过其value hash 映射到Node数组上。这样查找的就是O(1)的时间复杂度。 每个Node包含value,pre指针与next指针,方便在N之前插入节点。构造链表采用的是前插法,下面附上 java代码。 package com.xxx.link.list; final class Node{ private int value; private Node next; private Node pre; Node(int value, Node next,Node pre){ this.value = value; this.next = next; this.pre = pre; } public Node getPre() { return pre; } public void setPre(Node pre) { this.pre = pre; } public void setNext(Node next) { this.next = next; } public Node getNext() { return next; } public int getValue() { return value; } } public class HashLinkList { private transient Node[] table; private transient int size; private Node head; HashLinkList(int init_table_size){ table = new Node[init_table_size]; head = new Node(0,null,null); } private int indexFor(int h, int length) { return h & (length-1); } int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); } private int getIndex(int value){ int hash = hash(value); int i = indexFor(hash, table.length); return i; } public void addNode(Node e){ if(head.getNext() != null){ head.getNext().setPre(e); } e.setNext(head.getNext()); head.setNext(e); e.setPre(head); int index = getIndex(e.getValue()); table[index] = e; setSize(getSize() + 1); } public void addNode(Node e, int value){ int pos = getIndex(value); Node node = table[pos]; node.getPre().setNext(e); e.setPre(node.getPre()); e.setNext(node); node.setPre(e); int index = getIndex(e.getValue()); table[index] = e; setSize(getSize() + 1); } public void print(){ Node e = head; while(e.getNext() != null){ System.out.println(e.getNext().getValue()); e = e.getNext(); } } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public static void main(String[] args) { HashLinkList hashLinkList = new HashLinkList(10); for(int i=0; i<5; i++){ Node node = new Node(i,null,null); hashLinkList.addNode(node); } //在value为3的前面插入一个Node, value 为10 Node node = new Node(10,null,null); hashLinkList.addNode(node, 3); hashLinkList.print(); } }
  • 打赏
  • 举报
回复
尼玛,你揍直接说我装逼不揍成了! 这么巧,你也来装逼啊!
引用 16 楼 rui888 的回复:
[quote=引用 14 楼 micropentium6 的回复:] 目测不像大公司的面试题啊! 前两题貌似是要考数据结构和算法,可惜楼主表述不清。 第一题弄个链表还要求O(logN)以下的复杂度,扯 第二道题是在问heartbeat吗?如果真这么care超时,揍不应该用passive mode。好吧,我有5千台服务器,遍历5千行的表,很费时吗?超时设定是5分钟,5分钟检查一次,那表中所有的行都有可能超时!肿么预先估计?只有检查的interval小于timeout threshold,这道题才有意义 用load balancing里的session persistence, sticky session/session affinity之类的来考察程序员,有点不要脸。好吧,你可以说我有session集群。但那跟load balanced tomcat cluster还有个毛关系? 每台服务器可以到40万并发?这么牛!什么服务器,跑的什么服务啊?
大哥,很专业。 带我飞啊。[/quote]
tony4geek 2015-04-29
  • 打赏
  • 举报
回复
引用 14 楼 micropentium6 的回复:
目测不像大公司的面试题啊! 前两题貌似是要考数据结构和算法,可惜楼主表述不清。 第一题弄个链表还要求O(logN)以下的复杂度,扯 第二道题是在问heartbeat吗?如果真这么care超时,揍不应该用passive mode。好吧,我有5千台服务器,遍历5千行的表,很费时吗?超时设定是5分钟,5分钟检查一次,那表中所有的行都有可能超时!肿么预先估计?只有检查的interval小于timeout threshold,这道题才有意义 用load balancing里的session persistence, sticky session/session affinity之类的来考察程序员,有点不要脸。好吧,你可以说我有session集群。但那跟load balanced tomcat cluster还有个毛关系? 每台服务器可以到40万并发?这么牛!什么服务器,跑的什么服务啊?
大哥,很专业。 带我飞啊。
zsyhnxc 2015-04-29
  • 打赏
  • 举报
回复
很久以前就在论坛里见过,第一题印象太深了,不会跟之前发那个人面的同一家吧- -
grapepaul 2015-04-29
  • 打赏
  • 举报
回复
1. 单链表不遍历是有什么黑科技吗? 2. 又有什么黑科技? 3. 这不用做任何事也是这样的效果吧... 4. 分析这个问题,首先检查数据库服务器CPU/内存/IO读写 5. remote proxy 6. JMS完美解决,丢包不考虑的话 7. 应对方法是临时增加21组服务器 8. 优势就是用的人多,出问题更容易找到网上答案 9. 不懂
  • 打赏
  • 举报
回复
正准备辞职的,看到你的面试题,瞬间感觉后悔来到人间了
风吹过夏天 2015-04-29
  • 打赏
  • 举报
回复
尼玛这是要面多少K的岗位,应届生完全不会,怎么混。
  • 打赏
  • 举报
回复
目测不像大公司的面试题啊! 前两题貌似是要考数据结构和算法,可惜楼主表述不清。 第一题弄个链表还要求O(logN)以下的复杂度,扯 第二道题是在问heartbeat吗?如果真这么care超时,揍不应该用passive mode。好吧,我有5千台服务器,遍历5千行的表,很费时吗?超时设定是5分钟,5分钟检查一次,那表中所有的行都有可能超时!肿么预先估计?只有检查的interval小于timeout threshold,这道题才有意义 用load balancing里的session persistence, sticky session/session affinity之类的来考察程序员,有点不要脸。好吧,你可以说我有session集群。但那跟load balanced tomcat cluster还有个毛关系? 每台服务器可以到40万并发?这么牛!什么服务器,跑的什么服务啊?
等待时候 2015-04-28
  • 打赏
  • 举报
回复
你是面试开发,还是面试架构啊?
Inhibitory 2015-04-28
  • 打赏
  • 举报
回复
1. 可以看看Java的Linked Hash实现,Linked实现有序,Hash实现快速查询,这要求每个元素有一个唯一的key
Lucky_fishy 2015-04-28
  • 打赏
  • 举报
回复
第二题面试官是否说必须将超时数据立即标记?
这个题我有个思路,前提是id依序插入,同时不要求必须立即标记
第一次遍历全表是必须的,需要全部数据,这时需要记录2点,全表时间和最大id。因为条件是5分钟超时,那我们可以认为(当前时间-3分钟)之前的数据都有可能超时,例如现在17:16,那17:13之前的数据都有可能超时,这样在第二次需要确定的就是17:13之前的时间是否超时,并记录最大id之后的数据,这样以此循环。第一次遍历可看做最大id为0
老李家的小二 2015-04-28
  • 打赏
  • 举报
回复
怎么什么都不会呢?完了啊!!!
Wallbanger 2015-04-28
  • 打赏
  • 举报
回复
有点意思?绑顶,有没有大牛来解说下,求教
失落夏天 2015-04-28
  • 打赏
  • 举报
回复
第一题感觉你漏了某个条件。。 第二题如果id不变的话,有这样一个
引用 2 楼 xulianzhen 的回复:
第一个问题,链表中的数据是无序的,不能排序,面试官说排序也要消耗很多时间的。 第二个问题也不能排序,因为数据多少是不确定的,面试官说下次扫描的时候最好能到只去检查预计可能超时的那些行。他想听思路,,,泪奔,,,
这帖子我昨天就开始想了。我也想到应该是检查预计可能超时这是唯一的一条思路。但是问题你给的那两个5分钟不匹配啊。按照这个时间的话根本就对应不上这个思路。 要说一分钟检查一次,检查超时5分钟的那还可以。、 第一题的话,单链表,那么只能一个一个的往后查。获取一个节点,判断值是否对应,不对应就获取该节点中next的存储地址读值。一直这样下去。
xulianzhen 2015-04-28
  • 打赏
  • 举报
回复
面试开发啊,面试官就粗这样的问题,伤心啊,
Chengyajie521 2015-04-28
  • 打赏
  • 举报
回复
对,其实在链表中做二分也不会特别快,因为他不能像数组那样根据索引定位元素。你看这么来合适不,把这个节点放在链表头,这样就好定位了吧……
xulianzhen 2015-04-28
  • 打赏
  • 举报
回复
面试开发啊,面试官就粗这样的问题,伤心啊,
加载更多回复(4)

50,544

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧