今天下午参加了平安科技的见面会之后,晚上接着参加了微众银行的线下笔试。这样一天下来,其实挺累的。现在记录一下今天的一些心得体会。
平安科技见面会上一个搞技术开发的工作人员在分享经验时问了两个问题,让我记忆犹新。
问题1:如果你有一个好的idea,你会怎么做?假如你是公司的一个员工。
当时,我没太明白他的意思,后来经过他的提示后,才知道他问的是软件开发流程。
首先,有了一个好的idea,要做市场调研和可行性分析。这样才能从老板或者投资方那里拿钱。
然后呢,对于产品经理,需要做需求分析,给出产品原型。紧接着,项目经理需要给出项目的解决方案,比如开发中的人员分配。
再接着,就是架构师出场,他需要做架构设计以及数据库设计,同时进行技术选型。
接下来的事情就好办了,编程,测试,上线,运维等
问题2:以下单例类如何改进?
public class Singleton {
private Object instance = null;
public Singleton(){}
public Object getInstance(Object object){
if(instance == null){
instance = new Object();
}
return instance;
}
}
在getInstance方法前加上synchronized关键字。因为当并发量比较大时,有可能两个线程同时访问该对象,此时可能创建两个单例对象。因此需要做同步处理
接下来在说一说微众银行的面试题:
第一题:写出1....N之和的函数,时间复杂度o(1)
答:利用等差数列公式,Sn = n*(n+1)/2;
第二题:求两个数中的较大者,该数可以是int,float,double,byte类型
答:构造泛型类
第三题:生产者消费者队列:三个生产者,两个消费者。
package yy;
public class ProduceConsume {
public static void main(String[] args) {
SysStack sysStack = new SysStack();
Producer producer = new Producer(sysStack);
Consume consume = new Consume(sysStack);
Thread tp = new Thread(producer);
Thread tc = new Thread(consume);
tp.start();
tc.start();
}
}
class SteamBread{
int id;//馒头编号
public SteamBread(int id) {
this.id = id;
}
public String toString(){
return "steamBread:"+id;
}
}
class SysStack{
int index = 0;
SteamBread[] stBreads = new SteamBread[6];
//放入框中,相当于入栈
public synchronized void push(SteamBread sb){
while(index == stBreads.length){//栈满
try{
this.wait();//让当前线程等待
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.notify();//唤醒在此对象监视上等待的单个线程,即消费者线程
stBreads[index]=sb;
this.index++;
}
//从框中拿出,相当于出栈
public synchronized SteamBread pop(){
while(index == 0){//栈空
try {
this.wait();//阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();//唤醒
this.index--;
return stBreads[index];
}
}
class Consume implements Runnable{
SysStack sysStack = null;
public Consume(SysStack ss){
super();
this.sysStack = ss;
}
public void run(){
for(int i=0; i<20; i++){//开始消费馒头
SteamBread steamBread = sysStack.pop();
System.out.println("消费了"+steamBread);
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class Producer implements Runnable{
SysStack sysStack = null;
public Producer(SysStack ss) {
this.sysStack = ss;
}
@Override
public void run() {
//开始生产馒头
for(int i=0;i<20;i++){
SteamBread steamBread = new SteamBread(i);
sysStack.push(steamBread);
System.out.println("生产了"+steamBread);
try {
Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
第四题:假设QQ号码为int型,如何快速查看某QQ号是否已经被注册