简单东西-面试经历总结
2016-04-12 21:14
267 查看
最近两周找工作,面试过程中碰到一些比较有深度的提问,现在整理整理,也是学习的过程。
它一说出来我就恍然大悟,这不就是利用数组统计26个字母出现的次数么?定义一个数组,每个数组代表一个字母的出现次数,统计过程中直接在遍历过程中将某个字符累加到对应的数组元素上就完成统计了。
言归正传,这个统计同时在线用户总数的过程,大概思路是这样的,可以定义一个大大的数组,数组长度为一天的总秒数,以统计当天每一秒同时在线用户数。然后再遍历文件,根据用户的操作记录(登入/登出)来修正数组元素的值,可以将登入操作用数值1表示,登出操作用数值-1表示,然后统计当前这一秒同时在线人数=上一秒值+当前记录的操作对应的数值。大概的实现伪代码如下:public class UserOnline{
private int [] onlineArray;
private String fileName;
private final long seconds = 24*60*60;
public UserOnline(String fileName){
if(fileName==null||"".equals(fileName)){
return ;
}
this.fileName = fileName;
onlineArray = new int[seconds];
}
public void statistic(){
//遍历文件每一秒在线用户数
while(true){
String content = reader.readLine();
Record record = parse(content);
int time = record.getTime();
int action = record.getAction();
onlineArray[time]=onlineArray[time]+action;
}
}
private Record parse(String content){
String[] temp = content.split(" ");
int time = temp[0];
int action = "IN".equals(temp[2])?1:-1;
Record record = new Record(time,action);
return record;
}
}
public class Record{
private int time;
private int action;
public Record(int time,int action){
this.time = time;
this.action = action;
}
public int getTime(){
return time;
}
public int getAction(){
return action;
}
} 简单记录,也是面试中意外的学习收获吧!
布式环境下java的同步机制失效如何是好
我们知道java中的锁同步机制,是应用层面的,只对当前应用有效,所以对共享成员变量的同步处理在单个应用中有效。但是如果涉及到集群部署的环境,那么单个应用中的锁同步机制不是就失效了吗?那么共享变量该怎么处理呢?这是面试过程中遇到的第一个由深度的问题:分布式网站中,一件货品的数量是1,那么怎么保证最终只能有一个客户能够成功下单、抢购得到该商品呢?我当时的想法是,从应用层面来说,商品的数量就不能是应用层面共享的变量的,锁同步机制失效了,那么久需要用分布式锁管理。这个商品的数量应该从数据库中获取,使用分布式数据库锁,保证只能有一个线程能够正确完成写操作。Tomcate重启过程中如何保证Session也能被恢复
这个问题是一家专注金融产品的单位的面试官提出的,他问在生产环境下,如何保证Tomcat重启过程中,让用户感受不到宕机操作。这个是实际开发中可能会遇到的常见,我一直都是小打小闹做的项目,对服务器重启这种事司空见惯,也从来没有考虑过重启服务器对用户的影响。这个问题的本质就是Tomcate的Session持久化的配置问题,tomcate提供了Session持久化的两种策略,一种是存储到本地文件,还有一种就是存储到数据库。统计一天中每一秒同时在线的用户的数量
需求描述是这样的,有一个日志文件,格式为:时间戳 用户Id 用户操作(IN/OUT)记录一天中不同时刻用户的操作,然后需要统计每一秒同时在线的用户总数量。我开始想到的是用Map,以每一秒为key来统计,后来怎么都说不通顺,理不清这个思路。面试官给出的答案是直接使用数组,数组的每一个元素代表某一秒的同时在线的用户总数,而且下一秒在线的用户总数的统计可以直接依赖上一个元素在遍历文件过程中就可以完成统计过程。它一说出来我就恍然大悟,这不就是利用数组统计26个字母出现的次数么?定义一个数组,每个数组代表一个字母的出现次数,统计过程中直接在遍历过程中将某个字符累加到对应的数组元素上就完成统计了。
言归正传,这个统计同时在线用户总数的过程,大概思路是这样的,可以定义一个大大的数组,数组长度为一天的总秒数,以统计当天每一秒同时在线用户数。然后再遍历文件,根据用户的操作记录(登入/登出)来修正数组元素的值,可以将登入操作用数值1表示,登出操作用数值-1表示,然后统计当前这一秒同时在线人数=上一秒值+当前记录的操作对应的数值。大概的实现伪代码如下:public class UserOnline{
private int [] onlineArray;
private String fileName;
private final long seconds = 24*60*60;
public UserOnline(String fileName){
if(fileName==null||"".equals(fileName)){
return ;
}
this.fileName = fileName;
onlineArray = new int[seconds];
}
public void statistic(){
//遍历文件每一秒在线用户数
while(true){
String content = reader.readLine();
Record record = parse(content);
int time = record.getTime();
int action = record.getAction();
onlineArray[time]=onlineArray[time]+action;
}
}
private Record parse(String content){
String[] temp = content.split(" ");
int time = temp[0];
int action = "IN".equals(temp[2])?1:-1;
Record record = new Record(time,action);
return record;
}
}
public class Record{
private int time;
private int action;
public Record(int time,int action){
this.time = time;
this.action = action;
}
public int getTime(){
return time;
}
public int getAction(){
return action;
}
} 简单记录,也是面试中意外的学习收获吧!
相关文章推荐
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- C#常见算法面试题小结
- php 面试碰到过的问题 在此做下记录
- asp.net 面试+笔试题目第1/2页
- asp.net 面试 笔试题目[附答案]第1/3页
- Python爬虫工程师面试问题总结
- 谈谈最近深圳找工作经历
- 面试:(设计,架构)
- PHP中级面试经历
- 戴维营教育2015年iOS暑期班笔试面试基础考核题
- 一次有意思的面试
- 程序员编程面试取胜的8个技巧
- PHP相关面试中最经常涉及的12个问题
- 产品经理到底该如何自我介绍?
- 产品经理面试过程中如何回答比较宽泛的问题?
- [转]为什么面试官很少向求职者解释原因
- 面试时,你会问面试官哪些问题?
- asp.net面试中的四十一个经典题目