百度校招——移动软件研发工程师一面,二面,三面经历(已拿Offer)

百度校招移动软件研发工程师一面,二面,三面经历

一面:

手撕算法:

① 用两个栈实现一个队列;
② 实现一个单例模式;
写出来后又问了我这种写法多线程并发下安全吗?
——不安全
那如何保证单例模式多线程下的安全?
——我对getInstance()加了个synchronized
这种方式效率会不会比较低,有没有更高效的方案?
——降低锁的细粒度,对new SinglonInstance()加锁,但也不太妥当,多个线程同时进入if语句依旧有问题,然后我就没想到其他方案了,这里贴一个后来找到的解决方案,可以通过内部类解决;
③ 印象中还手撕了一个算法题,忘了是啥了。。。。。

Java和Android:

① 有拿到其他公司Offer吗?或者有正在谈的吗?
② 本科课程相关的问题(因为我不是计算机专业);
③ Android几种启动模式的区别?实例说明
④ TCP与UDP的区别,各适合什么样的应用场景,你觉得视频直播是采用哪种协议?
⑤ 死锁是什么?触发机制有哪些?
⑥ 注意到你项目中涉及了挺多数据,这些数据如何保存和管理的,如何访问的?
⑦ TCP协议为什么握手三次,而挥手需要四次?
。。。还有部分想不起来了

二面

算法:

①. 现在有一个函数,有70%概率输出0,30%概率输出1,现在请你实现一个函数,保证输出0和1的概率都是50%(口述思路和原理);
②. 输入一个纯数字字符串,转换为ip,输出所有可能转换的情况;

Java和Android

① 谈谈你对Java的理解;
② JVM和Dalvik区别;
③ 重载和重写的区别;
④ 抽象类和接口区别,如果让你带一个新人,你该如何向新人介绍两者区别及各自适用场景;
⑤ 有接触Kotlin和Flutter吗,项目中有使用吗?
⑥ 项目有转换到AndroidX吗?有没有出现过问题?
⑦ Error和Exception有什么区别,运行时异常了解吗?结合具体实例说明;
⑧ SharePreference多进程操作时安全吗?如何实现SharePreference多进程安全?
⑨ 项目中有遇到难点吗?怎么解决的?
⑩ 说说你对反射的理解。
⑪ HashMap有了解吗?HashMap, HashTable, ConcurrentHashMap原理和区别?平常项目中你采用哪种多一些?
⑫ HTTPS是如何实现的?具体加密方案是怎样的?
⑬ 物理地址和虚拟地址的区别?
印象中好像还问了几个,想不起来了。。。。

三面

开始一直再和我聊我大学期间做的一个算法项目,实现思路以及市场推广的可能性;
① 是项目负责人吗,除了算法和开发这一块,还具体负责哪些工作呢?
② 大学期间最大胆的一件事是什么?
③ 大学期间最遗憾的一件事是什么?
④ 大学期间有感觉压力特别大的时候吗,怎么解决的?
⑤ 你是如何学习Android的?
⑦ 如何看待互联网企业加班?
⑧ 有拿到其他公司Offer吗?
⑨ 目前最想去的是哪家公司?
⑩ 未来三五年的规划?
⑪ 为什么选择百度?

解释及答案

① 两个栈实现队列:

构造两个栈栈底相连,插入由一个栈完成,删除由另一个栈完成,注意判断栈空情况即可

import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        while(!stack2.isEmpty()){
            stack1.push(stack2.pop());
        }
        stack2.push(node);
    }
    
    public int pop() {
        while(!stack1.isEmpty()){
            stack2.push(stack1.pop());
        }
        return stack2.pop();
    }
}

② 单例模式

//初始版,懒汉式
public class SinglonInstace{
	puclic static sInstance = null;
	private SinglonInstance(){};
	public static SinglonInstance getInstance(){
		if(null == sInstance){
			return new SinglonInstance();
		}
		return sInstance;
	}
}

//加同步锁保证多线程安全,被质疑性能问题
public class SinglonInstace{
	puclic static sInstance = null;
	private SinglonInstance(){};
	public synchronized static SinglonInstance getInstance(){
		if(null == sInstance){
			return new SinglonInstance();
		}
		return sInstance;
	}
}

//最终解决方案,采用内部静态类解决问题
public class SinglonInstace{
	private SinglonInstance(){};
	private void SinglonInstanceHolder(){
		private static sInstance = new SinglonInstance();
	} 
	public static SinglonInstance getInstance(){
		return SinglonInstanceHolder.sInstance;
	}
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值