春招实习四五月份面试总结
春招四五月份面经
三月份的面试
腾讯客户端安全(4月14日 电话)
报批失败以后,抱着那么点幻想,去问了HR情况。后来接到了HR的电话说帮我正确到了一个面试的机会。
腾讯PCG看点一面(4月16日 腾讯会议60min)
- 
		项目 
- 
		APK的入口在哪里 
- 
		Activity的启动模式 
- 
		列表闪动的问题怎么解决的? 
- 
		ListView使用可以改进的问题,包括布局优化、异步加载资源的闪动问题等等。 
- 
		Glide 
- 
		LRU算法的思想? 
- 
		怎么设计一个图片加载工具? 
- 
		为什么使用Gson? 
- 
		知道哪些排序?快排和冒泡的思想?Arrays.sort方法的排序? 
- 
		对项目的总结感受? 
- 
		反问环节,问了下流程的时间问题,以及看点这边优先级比较高需要提前学习的内容。 
PCG看点二面(4月16日 电话40min)
- 
		介绍项目 
- 
		客户端发送信息给服务端去控制台灯,怎么保证台灯也能收到指令?联调怎么做的? 
- 
		为什么要进行布局优化的,从什么地方产生的这个需求? 
- 
		为什么使用Websocket,而不用Socket? 
- 
		获取图像然后使用SDK之前,有对图像进行处理吗。 
- 
		OkHttp当中学习过什么内容,网络请求是在哪里发起的?有哪些拦截器? 
- 
		原生的网络请求方法? 
- 
		APP框架怎么搭的? 
- 
		为什么使用Fragment?Fragment相比Activity的优势。 
- 
		HashMap是线程安全的吗? 
- 
		实验室相关? 
- 
		个人兴趣爱好? 
网易一面(4月17日 牛客视频 40min)
- 
		自我介绍 
- 
		为什么选择找安卓实习? 
- 
		简单介绍项目? 
- 
		使用到Websocket进行长连接,这个长连接实现的原理是什么?有什么好处呢? 
- 
		OkHttp看过源码吗?它的设计方法是什么?有哪些拦截器的? 
- 
		HTTP的常用响应码和HTTP的请求头? 
- 
		自定义View有哪些步骤? 
- 
		View的视图绘制过程中的几个方法都有些什么作用? 
- 
		项目中实现的自定义View是实现了什么功能,实现了哪些方法? 
- 
		事件分发的流程?产生的事件会经过哪些处理完整的讲一下? 
- 
		布局优化做了什么内容? 
- 
		内存泄露产生的原因?以及还有哪些场景? 
- 
		提到引用,那么Java当中的引用的区别都是什么? 
- 
		JVM运行时数据区? 
- 
		Java当中Error和Exception的区别?具体的Error和Exception常见的有哪些? 
- 
		打包的流程? 
- 
		Activity的启动模式? 
- 
		尺寸单位dp、sp、px的区别? 
- 
		Activity生命周期以及区别? 
- 
		反问环节,问了下部门的工作,用到的技术这些。
网易二面(4月22日 牛客视频50min)
- 
		自我介绍 
- 
		讲下项目觉得亮点的地方 
- 
		讲下项目当中二维码怎么实现的? 
- 
		如果要自己实现,怎么使假设一个url生成一个对应二维码? 
- 
		刚刚提到了加密,那就说下知道的加密方式? 
- 
		常用的对称加密有哪些? 
- 
		公钥私钥都是做什么的? 
- 
		项目里面用到了一个MPAndroidChart,那么这个框架怎么画图的有了解过吗? 
- 
		假设有一批数据,要画柱状图,怎么实现? 
- 
		HTTPs的加密会话的过程? 
- 
		MotionEvent有几种事件? 
- 
		ScrollTo和ScrollBy方法? 
- 
		SurfaceView和普通View的区别? 
- 
		requestLayout和invalidate方法的区别? 
- 
		死锁怎么发生的? 
- 
		了解银行家算法吗?目的是什么?思路是什么? 
- 
		res目录和asset目录的区别? 
- 
		虚拟机的垃圾回收机制? 
- 
		新生代老生代的回收算法有什么不一样啊? 
- 
		GCRoot怎么定义的? 
- 
		写个代码,两个线程轮流给变量i+1?
网易HR面(4月24日 牛客视频)
就是很普通的问题,为什么选择网易云音乐?对网易云音乐印象深刻的地方?说了评论。
斗鱼一面(4月23日 腾讯会议40min)
- 
		自我介绍 
- 
		讲下项目 
- 
		Java引用类型 
- 
		说下项目当中怎么选择抽象类和接口 
- 
		MVP架构模式的使用,MVP关系 
- 
		String、StringBuilder、StringBuffer的区别? 
- 
		那它的线程安全怎么做到的? 
- 
		数组和ArrayList、LinkedList的区别? 
- 
		volatile关键字保证了原子性吗? 
- 
		内存回收机制? 
- 
		jar包当中的一个class提供了一个功能,现在要对这个class进行一个扩展,那么有什么方式可以对这个class提供的功能做一个增强? 
- 
		那么对动态代理了解吗? 
- 
		InputStream和BufferedInputStream涉及到的设计模式? 
- 
		那么讲下装饰者模式,实现逻辑是怎样的? 
- 
		布局时include、merge、viewstub分别的作用? 
- 
		那么ViewStub在源码当中跟View有什么区别?为什么能做到懒加载? 
- 
		讲下View的绘制流程? 
- 
		项目当中遇到的一些问题? 
- 
		项目当中出现OOM或者ANR问题怎么解决?什么方式and什么工具? 
- 
		反问环节,问了下建议,面试官说回答不太连贯,虽然都在点上。然后问我对斗鱼有什么问题吗,就问了下斗鱼这边准备实习需要学习的内容? 一面完了以后我以为还有机会,之后就没有消息了,一个星期以后暂不匹配。当时面试的时候觉得问题还是挺简单的,但是后来听录音感觉自己其实回答的不太好,所以不仅仅是面试官说的那个说话不连贯的问题。加上后面还是面试官反问我对斗鱼还有什么问题吗,感觉印象是不是会不太好。
富途一面(4月24日 腾讯会议80min)
- 
		开始是聊了下 
- 
		然后是做了一些题,代码编程题智力题这些。 
- 
		深拷贝与浅拷贝 
- 
		内存对齐 
- 
		浏览器输入URL会发生什么 
- 
		。。。 
美团一面(4月28日 牛客视频90min)
- 
		工厂模式的使用场景。 
- 
		虚拟内存如何管理 
- 
		OSI七层模型。 
- 
		三次握手四次挥手https的握手。 
- 
		数据库的范式和事务 
忘记录音了,开头问了下为什么选择Android,问了对未来的规划,也问了学习的过程,看过什么书等等。
后面主要是从设计模式开始问起,然后问操作系统,计算机网络,然后写代码。
前面部分的回答还算流畅,但是计算机网络说到分层,在说数据链路层的时候居然卡壳了该死,而且我情不自禁低下头看键盘思考的时候,面试官叫我看着屏幕说别低着头,都不知道是不是被误会看小抄了。然后代码部分是一个剑指原题,中间的二叉树遍历这里我当时选择了非递归遍历,但是没太写好。
快手一面(5月11日 牛客视频120min)
- 
		自我介绍 
- 
		先介绍项目,项目里主要做的工作有哪些呢? 
- 
		项目里面提到的图像采集的部分是怎么做的呢? 
- 
		Websocket长连接是怎么做的? 
- 
		Java的基本类型有哪些? 
- 
		它们的长度分别是多少呢? 
- 
		自动装拆箱? 
- 
		final关键字的用法?知道哪些用法,在什么场景表示什么意思? 
- 
		对象的比较涉及的==和equals方法,它们之间的区别? 
- 
		为啥hashcode方法也要被重写呢? 
- 
		觉得Java当中哪些要素体现了面向对象的思想?以及项目当中是怎么应用的? 
- 
		怎么样理解多态呢? 
- 
		String = “abc” 和 String = new String("abc")这两种创建字符串之间的区别? 
- 
		String a = “abc” + “def”这个字符串拼接过程中+的过程是怎么实现的?编译期是个什么过程呢? 
- 
		用过StringBuilder吗?什么情况下会用这个? 
- 
		那么StringBuffer呢?和StringBuilder有什么区别吗? 
- 
		Java的引用类型有哪些?分别在什么场景下用,有些什么特点呢? 
- 
		内部类有哪些?又有什么不同呢? 
- 
		刚刚提到匿名内部类,那它有构造器吗? 
- 
		那么匿名内部类可以显式声明一个构造器吗? 
- 
		(上面回答了不可以)然后问如果要做一些初始化工作怎么办? 
- 
		finally的用法? 
- 
		知道异常链吗? 
- 
		项目当中有创建线程吗,创建线程都有哪些方法呢? 
- 
		线程池的类型都知道哪些? 
- 
		觉得线程安全的本质是什么? 
- 
		用过哪些手段保证线程安全? 
- 
		synchronized可以用在什么地方呢? 
- 
		volatile关键字了解过吗,作用是什么呢?原理呢? 
- 
		死锁是怎么产生的? 
- 
		怎么去打破死锁呢? 
- 
		juc包中了解哪些工具呢? 
- 
		那对ConcurrentHashMap了解哪些呢? 
- 
		ConcurrentHashMap内部的数据中每个桶是怎么组织的呢? 
- 
		那怎么扩容呢?旧的结点转移到新的位置,是怎么确定这个位置怎么对应呢? 
- 
		Android当中的LaunchMode有哪些? 
- 
		Activity的声明周期有哪些? 
- 
		前面提到的AsyncTask做异步任务,它的实现原理是怎样的?怎么更新UI?并发执行任务和顺利执行任务分别是怎么实现的? 
- 
		invalidate() 和 requestLayout() 
- 
		视图绘制机制? 
- 
		Android当中的Handler和Looper是怎样的一个关系呢? 
- 
		可以在一个进程当中创建多个Looper吗? 
- 
		假如现在有一个Button,用户点击这个Button,那么这个Button对这个触摸的响应,整个事件处理过程是怎样的? 
- 
		Surface、SurfaceView、SurfaceFlinger的关系? 
- 
		说下自定义View,举一些例子,说下是怎么做的? 
- 
		有自定义绘制的一些过程吗?那自定义绘制的时候有些什么需要注意的地方吗,比如效率方面等? 
- 
		Binder通信机制相关,做安卓应用的时候进程间通信都用过哪些呢?Binder实现原理是怎样的呢? 
- 
		Binder是怎样在进程隔离的情况下通过哪些手段进行通信的呢? 
- 
		知道MemoryMap吗? 
- 
		Fragment使用中用到的beginTransaction()的意义? 
- 
		了解RxJava吗?那了解其中的map操作符是做什么用的吗? 
- 
		讲下对内存泄露的理解吧! 
- 
		Java当中的垃圾回收都有哪些了解呢? 
- 
		DVM和ART的区别 
- 
		HTTP和TCP是什么关系呀? 
- 
		TCP的三次握手是什么过程呀? 
- 
		HTTPs和HTTP的区别是什么呢?安全层会话建立的过程是什么样的? 
- 
		Java当中List会有些不同的实现,那么ArrayList和LinkedList有些什么区别呢?结构,性能,效率等?使用的时候会怎么选择呢? 
- 
		平衡二叉树的概念? 
- 
		平衡二叉树的具体实现有哪些呢? 
- 
		怎么判断链表当中是否存在一个环呢? 
- 
		那怎么计算一个环的大小呢? 
- 
		写代码,反转链表。 
- 
		反问环节,问了下实习需要提前学习什么内容,以及问了下一些读源码的时候的对于代码细节不记得就感觉没有内容去支撑自己去讲述某一个代码的逻辑的这个困扰,然后面试官也是说前面回答发现我有些在乎代码的细节,方法名啥的记得很清楚这些,就给出了一些的建议。 
快手一面的面试官一直带着笑容,我回答完一个问题也会反馈一句“好呀”。
快手二面(5月14日 牛课视频60min)
- 
		了解局部性原理吗,有哪些例子 
- 
		CPU访问寄存器的速度和访问内存的速度 
- 
		那CPU的Cache是什么原理 
- 
		写出HashMap的put过程,后面是根据代码当中的内容提问,也就是HashMap当中的一些操作 
- 
		多生产者消费者模式实现 
- 
		如何确定对象是否会被回收 
- 
		可达性分析算法对应的是什么数据结构 
- 
		指出自己写的多生产者消费者模式实现代码当中哪些是GCRoot 
- 
		工作内存和主内存当中分别都有些什么 
- 
		hapens-before原则是什么,具体是什么 
- 
		invalidate方法 
- 
		Matrix了解吗 
- 
		我向面试官询问可以努力的地方(理论知识掌握了,但是实践没有跟上理论,没有很好的融会贯通) 
- 
		面试官问我觉得自己有什么优点 
- 
		面试官问我觉得自己什么地方需要是需要改善的 
面完以后感觉情况不妙,之前加了HR小哥哥的微信,就赶紧去问了下结果,很快就知道自己挂了,然后请HR帮我改了面试状态,就赶紧去投了快手北京的岗位。
不是说杨超越很灵吗?我头一天换上头像,快手二面就挂了嘛。
人人车(5月14日 电话60min)
字节一面(5月12日 牛客视频60min)
- 
		项目相关:计时部分如果时间特别长,怎么保证进程不被杀死呢? 
- 
		其他项目相关的问题。 
- 
		Handler 
- 
		Looper为什么不会阻塞 
- 
		HandlerThread 
- 
		怎么拿到当前线程的Looper呢? 
- 
		ThreadLocal 
- 
		遇到过其它内存泄露吗? 
- 
		怎么判断对象是否能被回收? 
- 
		哪些可以作为GCRoot? 
- 
		OkHttp学习过程中有什么收获吗? 
- 
		对于提到的设计模式说下有什么好处? 
- 
		Android当中应用到职责链模式的最突出的地方是哪个机制? 
- 
		滑动冲突是怎么解决的呢? 
- 
		往浏览器当中输入一个https的url,之后会发生什么? 
- 
		如果想一次性新建许多线程,每个线程都去发送一个网络请求,然后想等这十个网络请求的返回解析完成之后再去做别的事情,怎么去做这件事情呢? 就是用些线程协作工具类。 
- 
		一个线程做十个事情和十个线程分别做一件事情,总的CPU时间,哪个方式更快? 
- 
		使用多线程访问共享资源需要加锁,那么为什么Java当中会有这个访问冲突呢? 
- 
		那么为什么会有主内存工作内存这样的设计呢? 
- 
		写题目:题目是英文的,找出数组中最大的k个数? 我中间是写了个快排。 
- 
		如果是这个数组特别大,k的值特别小呢? 
- 
		反问环节: 问了下面试官对我面试过程中暴露的一些问题有什么建议?面试官说很多底层的问题也有接触,回答的过程比较详细了,但是对于一些场景问题反应不够快,实践稍微缺少一些,也给了一些建议,说我准备得还是比较充分。 问了下部门是做些什么内容?讲了下培养机制等等。 然后又问了下我对新技术的了解这些。 
字节二面(5月18日 牛客视频90min)
- 
		自我介绍提到了项目 
- 
		然后就开始问项目是什么样的,是课设毕设还是什么?然后说下项目。 
- 
		然后开始问什么时候接触安卓的,开始学习Java的时间,学校学习的课程等,实验室的情况等,以及做完项目以后学了些啥? 先问了这些情况以后,面试官说挺好的,然后接着问问题了。 
- 
		ArrayList怎么扩容? 
- 
		HashMap内部结构什么样的了解吗?1.7到1.8为什么要做这样的改动呢?插入的时间复杂度等。 
- 
		了解SparseArray吗?提到的一些结构,它的作用是什么? 
- 
		volatile这个关键字是做什么用的呢? 
- 
		多线程操作加锁怎么用? 
- 
		Synchronized和Lock的区别?这两种锁的使用场景又是什么呢?怎么做选择? 
- 
		Java的动态代理了解吗? 
- 
		代码过程中用到了Synchronized和Lock吗?提了下项目当中涉及的生产者消费者模式的运用。 
- 
		Synchronized是可重入的吗? 
- 
		Throwable、Error、Exception他们之间有什么区别啊? 
- 
		怎么样让一个异常变成CheckException呢?怎么让别人调用你的方法必须加try catch呢? 
- 
		如果try catch的是Throwable,这个时候程序执行到这抛出一个Error,能够catch住吗? 
- 
		Android的事件分发机制?提到的拦截是在哪个方法?View有这个方法吗? 
- 
		MotionEvent中的CANCEL事件这个事件时怎么产生的呢? 
- 
		Activity的生命周期,oncreate、onstart、onresume分别代表什么时机呢? 
- 
		这三个当中哪个能够做耗时操作呢? 
- 
		点个按钮,ActivityA到ActivityB期间,生命周期的转换。 
- 
		说下做了什么自定义控件?父类是什么,做了哪些处理,什么效果?用了啥? 我太啰嗦了,而且讲话还有点顿,说的差不多了,面试官说可以了,进行下一个问题。 
- 
		invalidate 和 postInvalidate 
- 
		View绘制的流程? 
- 
		然后开始问我什么时候可以去实习,大四有课吗? 
- 
		问数据库了,group by关键字作用?join?三个范式的定义? 
- 
		设计模式了解哪些? 
- 
		思考问题:序列当中正负数都有,怎么要求的一个最大和的连续序列?讲了思路以后写代码。 运行一下没写对,是后来才改对的。 面试官问我为啥之前不这么写。 
- 
		反问:问了面试官可提高的地方,建议知识点可再细化一些,and算法这块动手前可以想的清楚一些。 感觉字节的面试官都很好交流的样子,面完也七点半了,面试官说HR之后会通知。
字节三面(5月22日 牛客视频80min)
- 
		自我介绍,讲下项目 
- 
		问了下采集图像信息以后要分析的话模型怎么训练的? 
- 
		项目当中遇到的问题。 
- 
		事件分发 
- 
		事件分析,UP事件怎么确定最后传递给哪个View进行处理。 
- 
		如果说手指滑动出一个View,并没有出发一个Click事件,这个时候是怎么处理的呢? 
- 
		OkHttp的设计觉得有些什么好的特点?说了下设计模式、连接管理、连接复用这些。然后说了下HTTP当中的一些内容 
- 
		刚刚提到的是HTTP1当中的内容,那么HTTP/2有哪些不同呢? 
- 
		说完以后,面试官说没关系,答得不是太好吧。然后面试官说前面两面偏基础的东西问了很多了,然后问我Android这个方面的学习主要是通过一些什么途径呢? 
- 
		现阶段最大的困难是什么呢? 
- 
		可以实习到多久? 
- 
		实验室的项目做到最后是个什么状态呢?是个demo还是说实际上有用到? 
- 
		发过一些专利或者著作什么没有?或者关于一些项目当中比较好的点。 
- 
		然后开始做题,题目大概就是一个二位字符数字,然后搜索某个单词是否在这个二维数组当中以任何位置开始存在路径能够匹配这个单词。 害,丢人了,题目比较简单,但是写完以后运行不对,就开始找bug,面试官也和我一起找,然后发现是一个临界条件错了。 
- 
		反问环节: 也是问面试官从面试过程看有什么地方需要提高,但是面试官说关于缺点这个问题,很短时间内没办法回答,但是给我提了一些建议,聊了下Android体系当中的一些分支,深入源码等内容,学习渠道最新进展架构Jetpack等。 然后问了下对实习生的组织等。 
字节HR面
终于在周日下午,接到了HR的电话。
学而思一面(5月15日 赛码网视频80min)
- 
		讲讲项目技术点 
- 
		用到的HashMap说下 
- 
		使用红黑树有啥好处 
- 
		Android当中替代HashMap的数据结构有什么呢?HashMap有哪些缺点 
- 
		LinkedHashMap的特点,举例使用场景 
- 
		TreeMap的特点,举例使用场景 
- 
		OkHttp 
- 
		OkHttp和Retrofit的比较 
- 
		EventBus 
- 
		Glide 
- 
		RxJava 
- 
		线程池怎么创建的 
- 
		线程池怎么实现线程复用的 
- 
		线程锁 
- 
		Synchronized和Lock的区别 
- 
		项目里用了哪些设计模式 
- 
		架构模式MVC、MVP、MVVM 
- 
		了解哪些查找算法 
- 
		说下二分查找 
- 
		了解哪些排序 
- 
		数据量很大的情况下如何排序 
- 
		HTTPs和HTTP的区别 
- 
		加载一张大图,如何压缩呢 
- 
		invalidate和RequestLayout的区别 
- 
		Canvas常用api,某个图形的绘制怎么实现 
- 
		内存泄露 
- 
		APK打包过程 
- 
		签名有啥用 
- 
		文件上传 
- 
		断点续传 
- 
		常用git命令,那么add和commit区别 
- 
		m*n矩阵,从左上角走到右下角的走法。 
- 
		怎么学习,学习的渠道,读源码的方法,未来规划,未来想往技术发展还是管理层,想在哪发展……等等。 
学而思二面(5月19日 赛码网视频20min)
二面就问了下项目,问了一些多线程相关的问题,面试官说感觉不错就没有问了。
学而思HR面
也是一些平常的问题,然后问了下我对自己前面面试情况的一些评价,可能HR还要面下一个同学,我以为我多说一点会比较好,但是HR在我要展开的时候不让我展开说了,然后我后面就在详细与简洁之间有些混乱,感觉自己有点啰嗦。HR也是湖南老乡欸巧了,后面给我提了一些语言组织上的小建议。
阅文一面(5月26日 牛客视频50min)
- 
		基本数据类型and长度 
- 
		equals和==,那为什么要重写hashcode 
- 
		String x= "string" 与 String y="string",使用equals和==比较的分别会有什么结果 
- 
		那HashMap是线程安全的吗? 如果需要保证线程安全怎么做呢? 
- 
		synchronized原理 
- 
		... 
- 
		写个单例模式 
- 
		View的绘制 
- 
		事件分发 
- 
		发送一个请求会发生啥 
- 
		ListView的缓存 
- 
		RecyclerView的缓存有哪些不同 
- 
		UI卡顿如何解决 
阅文二面(5月26日 牛客视频40min)
- 
		活动声明周期 
- 
		横竖屏切换回发生什么,生命周期的变化 
- 
		发送http请求的时候会有些什么内容 
- 
		OkHttp拦截器有自己写过吗 
- 
		为什么要建立长连接 
- 
		题目:数组中有正数、负数,时间复杂度O(n),空间复杂度O(1)使他们负数在前面部分,正数在后面部分,并且正数之间或者负数之间原来的相对位置不变。 
- 
		题目:字符串中的大写字母个数
阅文HR面
也是一些平常的问题,从过往经历开始聊,然后聊了我的学习方法,实验室的情况等等,跟HR聊得挺顺利的。
欢聚一面(5月28日 牛客视频20min)
欢聚二面(6月 牛客视频80min)
- 
		自我介绍,然后开始讲项目。 
- 
		因为项目里面用到了MPAndroidChar,然后这里围绕绘图啊,假如说自己去实现一个图表怎么封装等等问了很久。柱状图、饼状图、标识等等。 
- 
		写过的自定义控件介绍下。 
- 
		invalidate和requestLayout方法的区别? 
- 
		为什么invalidate不需要经过测量和布局呢? 
- 
		那invalidate的过程这个View也不确定位置有没有变,怎么考虑呢? 
- 
		synchronized和Lock的区别?开始没听清,然后面试官给写出来,面试的时候经常要给我写一些东西,每次说“我打在公屏上吧”,感觉特出戏啊哈哈。 
- 
		那么公平锁和非公平锁怎么实现的呢? 
- 
		ArrayMap,SparseArray的结构和操作等等。 
- 
		volatile 
- 
		Fragment生命周期 
- 
		那前面弹个对话框出来,这时生命周期会怎么走? 
- 
		Activity的启动模式 
- 
		了解Kotlin吗?说下扩展函数吧? 
- 
		写下快排。 
- 
		反问环节:问了下面试官在面试过程中发现的一些问题的建议等等,面试官说有的地方思维有点乱,可以再总结好一点;然后框架设计的方面再思考下。
欢聚HR面(电话40min)
腾讯捞起(6月3日)
上次正式批一轮游以后,上午游完,下午就被捞了,但是也就状态绿了十几天,并没有发起面试就被放生了。
然后晚上接到一个电话,居然是声音温柔的女面试官,是个小姐姐。我先说明了自己的情况,表示要去实习了,而且很久不在面试状态害怕留下不好的面试记录,就不参加面试了吧。面试官就问了下是哪家和base以及转正情况这些,然后跟我说了下这次是CSIG的部门,主要做的是性能优化,数据计算这些内容的工作,并且也表示只要通过面试不会出现hc不够的情况了,我想了下还是决定参加下面试,接着本来是要直接问问题面试了,但是第二天有个考试,就跟面试官约定好第二天晚上。


 投递美团等公司10个岗位
投递美团等公司10个岗位