赞
踩
小米面试会预约一个时间发邮件这里有个坑,发的邮件不光有约定的地点+时间,后面还有一个确认接受,我没点确认接受,导致我去前台查询说我没有查询到,面试了3个回合,3个小时,没有中间休息,建议大家面试之前带瓶水丶带瓶水丶带瓶水,重要的事情说三遍,最后也没有到HR,我的结果应该是凉凉,过程还是很轻松的
刚开始我脑袋一懵啥是生产者丶消费者,面试官说你软件工程毕业不知道什么是生产者消费者?面试官还算照顾告诉了我下生产者丶消费者的逻辑,我想起来了,然后让我代码实现下,我是这样实现的
/** * 生产者队列(最后感觉用队列比较好) */ Stack<String> strings = new Stack<>(); /** * 需要生产的总数 */ int count = 100; /** * 允许缓存的最大数 */ int cache = 10; /** * 已经生产的个数 */ int value = 0; public synchronized void produce() throws InterruptedException { while (value < count) { if (strings.size() < cache) { strings.push("生产一个数据"); value++; notifyAll(); }else { wait(); } } } public synchronized void consume() throws InterruptedException { while (value < count) { if (!strings.isEmpty()) { String pop = strings.pop(); notifyAll(); }else { wait(); } } }
结果:说是我大体思路是对的,但是生产者消费者不这样写,这是我的答案,也不是准确答案哦
过于简单,就不上代码了,我使用递归写的,因为代码量少
我的答案是通过Handler可以实现线程间通的通讯和共享遍历,然后叙述了共享变量,多线程的安全问题,主要叙述了要保证三要素,如何去保证三要素的问题
我叙述是从Activity事件开始,他突然问我Activity事件从哪里来的?我一脸懵逼,这个我还真不知道,他又说那你就从Activity开始说吧?然后一顿巴拉巴拉
把上面的图片叙述了一遍,外加特殊的情况叙述了下
题目给了一个集合,集合中存储了每个的数据,自定义一个柱状图的View,View高度固定100dp,宽度占全屏
我的答案是,先获取的屏幕的宽度,宽度/集合长度,得到每个柱子的可以绘制的区域,然后通过Path先画2个坐标轴的线,然后根据上面的宽度,能计算出每个柱子画的左,上,右,下的位置,挨个画矩形即可,理论上是可以行得通的。但是我发现后面叙述过程中我感觉每次都去计算矩形的位置,有点麻烦,可以通过画布平移然后再去取画柱子,应该简单点,我大体只能想到这个思路了
问这个问题的我当时其实有点懵的,不是我不知道答案,而是我不知道他想问的是什么?是想问我View的那几个方法吗?我反问他是想叙述View的那几个核心方法,还是说View通过怎样的流程添加到窗口的上的,就是Activcity的PhoneWindow说起,最后我还是叙述的测量,draw,layout
懒得说了
这个从startActivity开始说起,AMS->ApplicationThread->ActivityThread等差不多的叙述了一遍
我当时回答的是,一般来说是不可以的,因为更新View的规定必须要在主线程中执行,但是也有特殊的情况,这个能不能在子线程更新View,主要是看ViewRootImpl是否被创建了,因为更新View都是调用其requestLayout方法,最终都会调用到ViewRootImpl方法的requestLayout方法,这个方法里面会有checkThread就是检测当前线程是否在主线程中,如果这种情况,在Activity的onCreate方法中,立刻开启执行线程执行更新View,是不会崩溃的,因为ViewRootImpl对象没有创建,具体流程可以去看Avtivity的setCountentView是如何加入到窗体上的过程就可以
详细原因看这里
然后我
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。