范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

字节跳动面试(1)

  A.基本技术题Activity生命周期
  第一个Activity01:onCreate01->onStart01->onResume01
  显示dialog,生命周期不会变化,不会调用onPause
  跳转到Activity02
  a.如果Activity02正常的:
  onPause01->onCreate02->onStart02->onResume02->onStop01->onSaveInstanceState01
  Activity02退出返回:
  onPause02->onRestart01->onStart01->onResume01->onStop02->onDestroy02
  b.如果Activity02是透明的
  onPause01->onCreate02->onStart02->onResume02
  透明Activity02退出返回:
  onPause02->onResume01->onStop02->onDestroy02
  总结:跳转到另一个Activity,首先是当前Activity onPause,然后新的Activity生命周期一直到onResume,然后之前的Activity再执行onStop/onSaveInstanceState.
  在adb中使用:>adb shell am kill 包名(如com.example.lcp)可模拟内存不足时进程被杀死,之后返回该应用时,每个Activity调用的是onCreate->onStart->onRestoreInstanceState->onResume
  2. onNewIntent调用时机、四种启动方式
  注:onNewIntent(肯定是已存在,第二次startActivity的时候调用出现的)总是在onResume之前,如果有onStart,就在onStart之后
  Standard:每次创建新的
  SingleTask:如果栈中已存在,就把它上面的所有实例finish,把它提到栈顶
  SingleInstance:只有一个实例,并且运行在自己的独立栈中
  SingleTop:如果当前栈顶是它,就复用
  自己跳转自己,除了Standard都会调用onNewIntent。
  其他跳转过来,SingleTask和SingleInstance会调用onNewIntent,如果当前栈顶是自己,那么SingleTop也会调用onNewIntent
  singleInstance的坑借鉴这篇文章
  这个模式才是重点,也是比较容易入坑的一种启动模式。字面上理解为单一实力。它具备所有singleTask的特点,唯一不同的是,它是存在于另一个任务栈中。上面的三种模式都存在于同一个任务栈中,而这种模式则是存在于另一个任务栈中。举个例子,上面的启动模式都存在于地球上,而这种模式存在于火星上。整个Android系统就是个宇宙。下面来详细介绍一下singleInstance的坑。 singleInstance之一坑
  此时有三个activity,ActivityA,ActivityB,ActivityC,除了ActivityB的启动模式为singleInstance,其他的启动模式都为默认的。startActivity了一个ActivityA,在ActivityA里startActivity了一个ActivityB,在ActivityB里startActivity了一个ActivityC。
  此时在当前的任务栈中的顺序是,ActivityA->ActivityB->ActivityC。照理来说在当前ActivityC页面按返回键,finish当前界面后应当回到ActivityB界面。但是事与愿违,奇迹出现了,页面直接回到了ActivityA。
  这是为什么呢?其实想想就能明白了,上面已经说过,singleInstance模式是存在于另一个任务栈中的。也就是说ActivityA和ActivityC是处于同一个任务栈中的,ActivityB则是存在另个栈中。所以当关闭了ActivityC的时候,它自然就会去找当前任务栈存在的activity。当前的activity都关闭了之后,才会去找另一个任务栈中的activity。
  也就是说当在ActivityC中finish之后,会回到ActivityA的界面,在ActivityA里finish之后会回到ActivityB界面。如果还想回到ActivityB的页面怎么办呢?我的做法是,在ActivityB定义一个全局变量,public static boolean returnActivityB;界面需要跳转的时候将returnActivityB=true;然后在ActivityA界面onstart方法里判断returnActivityB是否为true,是的话就跳转到ActivityB,同时将returnActivityB=false;这样就能解决跳转的问题了。不过感觉还不是很好,如果有更好的方法,欢迎大家给我留言告诉我一声。 singleInstance之二坑
  此时有两个个activity,ActivityA,ActivityB,ActivityA的启动模式为默认的,ActivityB的启动模式为singleInstance。当在ActivityA里startActivity了ActivityB,当前页面为ActivityB。按下home键。应用退到后台。此时再点击桌面图标进入APP,按照天理来说,此时的界面应该是ActivityB,可是奇迹又出现了,当前显示的界面是ActivityA,并且返回不会显示ActivityB了。(如果是在最近运行的应用列表中选择,则回去的是ActivityB,并且返回不会再显示ActivityA了)
  这是因为当重新启动的时候,系统会先去找主栈(我是这么叫的)里的activity,也就是APP中LAUNCHER的activity所处在的栈。查看是否有存在的activity。没有的话则会重新启动LAUNCHER。要解决这个方法则是和一坑的解决办法一样,在ActivityB定义一个全局变量,public static boolean returnActivityB;在oncreat方法将returnActivityB=true;然后在ActivityA界面onstart方法里判断returnActivityB是否为true,是的话就跳转到ActivityB,同时将returnActivityB=false;这样就能解决跳转的问题了。
  注意:Intent设置的Flags优先级高于manifest中设置的启动模式,即运行时的实际要求优先级高于配置
  3. HashMap结构、扩容时机、ConcurrentHashMap实现线程安全机制
  A.HashMap:数组+链表,当链表数量大于8时,链表变成红黑树
  B.HahMap扩容时机:初始数组也就是桶的容量capacity是16,必须是2的幂,当map数量等于数组数量capcity*factor(默认值是0.75)时,比如16*3/4=12时,数组扩容,减小哈希碰撞
  C.ConcurrentHashMap使用Synchronized同步块而不是同步方法(1.8,在1.7中使用ReentrantLock重入锁)实现安全机制,同时使用CAS(CompareAndSwap:比较并替换,是UnSafe类,适用于原子类,就是所有操作都是原子的,要么成功,要么失败)操作 什么是unsafe呢?Java语言不像C,C++那样可以直接访问底层操作系统,但是JVM为我们提供了一个后门,这个后门就是unsafe。unsafe为我们提供了硬件级别的原子操作。至于valueOffset对象,是通过unsafe.objectFiledOffset方法得到,所代表的是AtomicInteger对象value成员变量在内存中的偏移量。我们可以简单的把valueOffset理解为value变量的内存地址。我们上面说过,CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。而unsafe的compareAndSwapInt方法的参数包括了这三个基本元素:valueOffset参数代表了V,expect参数代表了A,update参数代表了B。正是unsafe的compareAndSwapInt方法保证了Compare和Swap操作之间的原子性操作。
  4. Okhttp和retrofit比volley好在哪里,retrofit实现原理,断点下载
  添加配置,retrofit实现restApi,怎么实现的?
  断点下载,请求头中有Range数据的信息,只要客户端告诉服务端从range字节开始返回数据就可以了。多线程下载是说每个线程下载不同的range就可以实现了。
  5. Binder底层实现机制
  6. 消息机制、进程间通信 B.Kotlin问题:
  inline/noinline/crossinline三个关键字区别,好处是什么
  参考  StefanJi关于inline/noinline/crossinline的解释 :
  a. inline:内联函数,就是在编译期将函数代码直接复制到调用的地方
  noinline和crossinline都用在inline函数中
  b. noinline就是不要直接复制代码
  c. crossinline不允许lambda中有显示的return语句,正常的function可以有 C.算法题:
  1. 链表反转
  方法1:对我来说最好的理解方式是:将第一个元素作为轴心current,每次循环都把current的后一个元素放到第一位 Class Node(var number:Int?,var next:Node)  fun reverse(head:Node) {     //把第一个元素作为当前元素current,每次循环都将current的下一个元素current.next移到第一位,直到current.next=null为止     //时间复杂度为O(n),空间复杂度是1     var current = head.next     while (current?.next != null) {         val first = head.next         val currentNext = current.next         //current的下一个元素移动到第一位         head.next = currentNext         current.next = currentNext?.next         currentNext?.next = first     } }
  方法2:fun reverse2(head:Node) {     //新建一个节点,每次通过将p节点连接到newFirst,然后newFirst=p,p=p.next就可以进行链表反转了     var newFirst: Node?=null     var p:Node? = head.next     while (p != null) {         val tmp = p.next         p.next=newFirst         newFirst=p         p = tmp     }     head.next=newHead }
  2. 一个数组,将所有0前移,非0保持前后位置 fun arrayMoveZeroToFront(array: IntArray) {     //最后一个0的位置     var lastZeroIndex = -1     //循环时与最后一个0的位置对比,如果非0并且后面还有0,就交换位置     for (i in array.indices.reversed()) {         if (array[i] == 0) {             if (lastZeroIndex < i)                 lastZeroIndex = i         } else {             if (i < lastZeroIndex) {                 array[lastZeroIndex] = array[i]                 array[i] = 0                 lastZeroIndex--             }         }     }     println(array.contentToString()) }

杜峰们没必要一趟一趟的出国学习,马布里重返CBA之感悟放眼CBA土帅当道,CBA所有主教练中暂无一名外籍主教练。排名第一的浙江稠州男篮主教练王世龙,辽宁本溪人。排名第二的辽宁男篮主教练杨鸣,辽宁大连人。排名第三的广东东莞主教练杜峰,新摊牌了!杜兆才落选还有大麻烦,马德兴点评一针见血,咎由自取最近,中国足协力挺杜兆才参选谋求连任国际足联理事,最终的结果出人意料。七名候选人竞选五个席位,杜兆才和韩国足协的郑准奎,双双遗憾落选。杜兆才遗憾落选之后,也给中国足球带来了一系列的狂飙陈书婷扮演者高叶火了!孙红雷曾为她打抱不平狂飙在春节档的热播,使女演员高叶一夜之间成为国民大嫂,在剧中饰演陈书婷的她,受到很多网友的喜爱和关注。近日,高叶登上时装男士LOFFICIELHOMMES,一组鎏金光影氛围大片曝光美白后,重金属检查结果出来的那一刻,她傻了眼汞中毒撰文刘琳卓莉编辑保健君俗话说,一白遮百丑,一黑毁所有。爱美的女性对于美白的追求总是乐此不疲!我国古代骚客文人们也留下了大量的诗篇,佐证了女性对于美白肌肤的欣赏。例如白居易就曾错过了春节的云南,那就来感受云南的春天吧!编者按2023年春节,云南旅游市场被赋予了更多期待。1月19日,春节即将到来之际,本报刊发这个春节来云南吧,以图文形式展示云南之美,并发出诚挚邀请远方的客人,七彩云南欢迎你!为重振立春吃三鲜,一年病不沾,明日立春,三鲜分别指啥?别不懂吃头条创作挑战赛春节过完也有一段时间了,不知不觉明天就到了立春,也就代表着冬天即将结束,春天马上到来。立春作为24节气之首,是新一年的起始,人们脱下厚装,万物焕发生机,风和日丽,十分檀林Web3。0时代的创投与孵化Web3。0时代,传统VC(风险投资机构)正在面临哪些颠覆与转型?数字经济时代将催生出何种更高维的商业模式?创投与孵化会有哪些底层逻辑的转变和新玩法?这些对创业者有何启示?在36氪羽毛球高端拍和低端拍的区别在哪?羽毛球高端拍和低端拍的主要区别在于羽毛球拍的材质重量和手感等方面。首先,羽毛球高端拍的材质更耐用,因为它们通常由更耐用的材料制成,如碳素材料,耐磨材料,甚至不锈钢,使它们具有更好的FIIL又发大招拿下HiRes小金标,音质与降噪俱佳种草机前不久,FIIL的新耳机秘密被送到了我们这儿,说是有大升级。到了以后我们就迫不及待地开箱,看看这回有什么新的惊喜。看到盒子以后,左下角的logo成功吸引了我的注意。嚯,这不是象征音全国三亿青少年进森林研学教育活动大事记2020年6月,组委会发布全国三亿青少年进森林研学教育活动方案。方案提出加快推动自然教育基础设施建设,打造一批国家青少年自然教育绿色营地,逐步把青少年进森林研学教育活动融入中小学校春节消费六大观察丨南财号联播mpId237兔年春节全国旅游成绩单出炉云南等四个省份旅游人次和收入均超2019年同期当兔年春节假期行至尾声,文化和旅游部第一时间公布了全国旅游市场的春节成绩单。根据文化和旅游部1
青海发掘一座妖墓,拔地而起33米,专家挖到一半连忙撤出墓葬文化来源已久,据研究发现,中国人的墓葬制度最迟到旧石器时代晚期也已经出现。一般来说随墓葬出现的还有大量的陪葬品如器具书籍金银用品等,在中国古代的阶级社会,墓葬制度是人的身份地位1950年龙云儿子被陈赓击毙,龙云不悦,毛主席你自己去云南看看1950年6月18日,陈赓指挥解放军与假意投降的龙绳曾部,在昭通展开激战,两个小时后,解放军成功击毙龙绳曾等叛匪首领。6月23日,云南日报发布公告,宣布我方曾多次派出代表与龙绳曾等鲁迅为何逐渐被移出教科书?其被批不是文学家,原因有三鲁迅先生是中国近代最伟大的思想家和文学革命家,这一点应该是全中国人民公认的。他生活在那个最黑暗和最愚昧的年代,但是他却用自己手中的笔为人民群众开辟了一条最光明的道路。身为一位左翼作日本陋习夜爬为人口繁衍不择手段,一直延续到上世纪才废除一般来说,孩子的诞生都是建立在男女双方已经有婚姻的事实前提下,若是婚外生子,在古代不说庶子,连进家门的资格都没有。现代社会较之古代,相对而言,算是比较开放的,男女双方在未婚的前提下吴健雄曾为美国造原子弹,逝世后墓碑上写着一个永远的中国人吴健雄曾为美国造原子弹,逝世后墓碑上写着一个永远的中国人她曾被誉为东方居里夫人原子弹之母。在众多称号的加持下,她可以说是地面上最强大的女人,吴健雄。1958年,她当选美国科学院院士日本女护士嫁中国将军64年,生下歌唱家女儿,女婿更是家喻户晓1913年6月18日,河北保定陆军军官学校发生了一件大事。当天凌晨,校长蒋百里正在操场训话时,突然掏出手枪对着自己胸前开了一枪。自杀前,蒋百里给母亲写了一封为国尽忠的家书。从这封家卡扎菲逝世前躲在下水道被揪出,对打他两巴掌的士兵说了两句话如果不是卡扎菲,或许没有几个人会关注利比亚,在卡扎菲掌权之前,利比亚在世界上的存在感几乎为零,直到2011年美英法等多国军队空袭利比亚,世界人民才对这个名不见经传的阿拉伯国家有了初改而不革的张居正纵观中国历史,一个老百姓家的孩子,做文官能做到连皇帝都靠边站,可谓是登峰造极了,要换个人,前呼后拥,舒舒坦坦过一辈子,随便搞点政绩,出点小名,这就齐了,然后张居正不是小名人,是大名日本陋习夜爬为人口繁衍不择手段,一直延续到上世纪才废止在历史的发展中,每个民族都会有着一些封建陋习。这些陋习都是源自于古代人们低下的生产力与思想水平,但也正因如此,在长久缓慢发展的农耕社会中,这些封建陋习反而难以被拔除。例如日本,日本离开祖国79年,经过长达40年的谈判,这块土地终于重归国土版图在那段最黑暗的历史中,中国大地曾经四分五裂,民族主权和土地主权都不复存在,在晚清政府的放任之下,我国被迫割让了150多万平方公里的土地,这是一个多么令人心惊的数据。而这些被割让的土106岁宋美龄来到宋子文墓前,忽而心生悔恨,悲伤说出一番戳心话1971年4月25日,美国西部城市的旧金山,傍晚时分一辆白色小汽车驶入湾区林森路158号,从车上走下来一位身穿白西装手拿白礼帽的华人老头。他就是曾担任国民政府财政部长外交部长及行政