logo资料库

字节跳动(抖音面试题).docx

第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
资料共30页,剩余部分请下载后查看
抖音面试题 笔试部分 (面试官也不知道为啥 hr 给了我一套社招的题) 1.中间透明、四周蒙层遮蔽的效果是如何实现的 2.关于 promise 的一段代码的执行结果是什么 3.输出结果是什么?this.name 中的 this 指谁? window.name = "byteDance"; function A() { this.name = 123; } A.prototype.getA = function() { console.log(this.name); return this.name + 1; } let a = new A(); let funA = a.getA; funA(); 4.给一个字符串,找出出现次数最多的字符和对应的次数。(编程) 5.最大子序和,时间复杂度 O(n) 面试环节: js 1.xss 攻击是什么样的形式?如何防范?vue 其实已经帮我们做了防范,v-html="xxx",xxx 是什 么 2.vue 是单向绑定的,是如何实现数据改变、相应文档进行更改的? 3.user-scalable=no 表示什么?在 IOS 上即时设为 no 也是不生效的,如何解决?如果监听 touch 事件,callback 里面写什么?直接 return 会有问题。 4.echarts 是基于什么的?canvas 的大小会随着窗口大小发生改变么? 5.写一个函数,实现深拷贝,要考虑所有数据类型 6.以下两段程序分别输出什么
var script=document.createElement('script'); script.src="xxx/xxx/React.js" document.appendChild(script); console.log(window.React); //****************** var script=document.createElement('script'); script.text="alert(from script)"; console.log("before script"); document.appendChild(script); console.log("after script"); 7.项目使用的什么框架?vue 的线上线下环境部署使用的什么技术? 8.preflighted Requests 预检请求了解么 html&css 1.让你实现一个弹窗,你会怎么设计文档结构?会考虑哪些问题?半透明背景的设置 rgba 和 opacity 有什么区别?这两个有一个用在这里会有问题;点击穿透怎么解决(是阻止默认 事件还是阻止冒泡事件?) 2.在页面加载时考虑过哪些优化 3.图片懒加载 4.商品评价的时候,默认 5 星,评分 3 分、3.5 分,怎么实现?评分 3.6、3.7 呢 http 1. 与 缓 存相 关 的 header 有 哪 几个 ? 分 别 是什 么 内 容? (last-Modified 之 类 的) 如 果是 last-modified,服务器查询了下,没有更新数据,会给客户端返回哪个码? 2.http 是基于什么协议的?TCP 三次握手与四次挥手的过程。 3.dns 解析的过程 4.什么情况下属于跨域?跨域的解决方式(jsonp 了解下) 5.说一下 cookie 与 session。cookie 添加到了 http 请求的哪里,设置什么字段就可以携带 cookie? 6.从用户点击注册开始,都发生了什么
J2SE 篇幅 1.Java 里头的多态是什么意思? 其实回答这个问题很简单,大家可以直接列举出形成多态具备的条件就可以了 首先必须要有继承或者实现 其次是要有方法的重写 最后一个是父类引用指向子类对象 大多数情况下回答这三个就 ok 了,再具体点直接给面试官举个例子: 动物类 Animal 狗 Dog extends Animal 猫 Cat extends Animal --->>继承 Animal 有个方法 吃得方法 eat() 狗不满意这个父类的吃法,自己重写了 eat() 猫也不满意这个父类的吃饭,自己也重写了 eat() --->>重写 最后 Animal animal = new Dog(); --->>父类引用指向子类对象 animal.eat();调用这个方法实际执行的是狗的吃的方法,这就是多态,实 际运行时动态绑定。 2.GC 的原理 当堆内存里的对象没有引用指向了,GC 就来了。一句话言简意赅 3.抽象类跟接口的区别 抽象类可以有非抽象的方法,接口只有方法的定义没有实现,实现接口必须重写 接口所有定义的方法,接口里头变量是 static final 的常量 4.StringBuffer 跟 StringBuider 的区别 StringBuider 非线程安全,执行速度快,单线程用这个类 5.sleep(), wait()的区别 sleep 不释放同步锁,自动唤醒,需要 try catch, wait 释放同步锁,需要 notify 来唤醒 sleep 是线程的方法 wait 是 Object 的方法
6.递归执行路径有几条。 主要是考察你对 java 线程的执行路径,其实递归并不是开启线程,虽然是重复 调用方法本身,其实执行路径就一条。 7.LinkedList 跟 ArrayList 的区别 一个链表结构,一个数组结构,LinkedList 查找慢,插入快,ArrayList 查找快, 插入慢。 Android 篇幅 1.手写一个线程安全的单例 public class SigleInstance { private static SigleInstance instance; public static SigleInstance getInstance() { if (instance == null) { syncronized(SigleInstance.class) { if (instance == null) { instance = new SingleInstance(); } } } return instance; } } 这个算是目前来说最有的单例,最好是能手写出来,面试官主要是考你为什么同 步关键字要写在方法里头,写在那块,其实你只要答到点上就 ok 了,主要原因 就是不用频繁加锁,因为频繁加锁会消耗性能,当 instance new 出来之后,可 以不用在方法外加锁就直接返回实例,减少了一次加锁的操作。 2.Bitmap 图像模式有哪几种,给出一张 1080 * 1920 的,ARGB 8888 格式的占 用内存是多大
ARGB 8888 一个像素占用 4 个字节,一个字节 8 位,1080 * 1920 * 4 * 8 3.静态方法跟静态代码块有什么区别。 静态方法属于类,用类名.就能直接调用,静态代码块是类加载的时候就会调用 的 4.Android 进程有哪几种 前台进程,可见进程,服务进程,后台进程,空进程 5.Runnable , Callable, Feature 三个的区别 Runnable 没有返回值,Callable 有返回值,Feature 一般配合 Callable 来使用, 用于检测任务的状态,具有有是否执行完成,还可以做取消任务操作,再可以稍 微撤下 AsyncTask 源码,因为有返回值,其实底层也是用 Callable 跟 Feature 来实现的, 显得你会懂一些源码,会是加分项 6.一个应用允许多个进程吗? 允许,最直接的直接说在功能清单文件里配置 Service 为一个独立进程,android: process 就能配置 7.多进程会引起一些什么样的异常呢? (1)静态成员和单例模式完全 shixiao (2)线程同步机制完全失效 (3)SharedPreferences 的可靠性下降 (4)Application 会多次创建 8.HashMap 的底层数据结构 数组加链表 9.Serializable 和 Parcelable 的区别 Serializable 是 java 中序列化接口,使用开销很大,序列化和反序列化过程需要 大量的 I/0 操作,Parcelable 是 Android 中序列化的方式,用起来虽然麻烦一些,
效率很高,Parcelable 主要用在内存序列化上,如果说要序列化到存储设备中, 建议大家使用 Serializable,具体通过 Object 流来做序列化操作。 1.什么是接口?Android 中有哪些机制是基于接口编程? 接口就是一些方法特征的集合,用 interface 修饰。 面向接口编程:http://blog.csdn.net/wangjinyu501/article/details/74355351 2.说明 Activity 和 Service 的生命周期? 3.Intent flag 有哪些?作用是什么? 自己看(25 种) :https://www.jianshu.com/p/08177910b0a2 4.Android 的多线程模型有哪几种? Android 提供了四种常用的操作多线程的方式,分别是: 1. Handler+Thread 2. AsyncTask 3. ThreadPoolExecutor 4. IntentService 详细介绍:https://www.jianshu.com/p/2b634a7c49ec 5.如何规避 oom? 1.使用更加轻量的数据结构 2.避免在 Android 里面使用 Enum 3.减小 Bitmap 对象的内存占用 4.使用更小的图片 5.复用系统自带的资源 6.注意在 ListView/GridView 等出现大量重复子组件的视图里面对 ConvertView 的复用 7.Bitmap 对象的复用 8.避免在 onDraw 方法里面执行对象的创建 9.避免对象的内存泄露(重点) 10.考虑使用 Application Context 而不是 Activity Context 11.注意 WebView 的泄漏(重点) 12.资源文件需要选择合适的文件夹进行存放 13.谨慎使用 static 对象(重点) 14.特别留意单例对象中不合理的持有 15.珍惜 Services 资源 16.谨慎使用“抽象”编程 17.谨慎使用依赖注入框架 18..谨慎使用多进程 19.Handler 的使用(重点)
20.强软弱虚引用的应用(重点) 22.主线程操作 UI,子线程操作数据(必填) 原因地址:http://blog.csdn.net/ljx19900116/article/details/50037627 6.数据存储有哪些方式? 1.sharedpreferences 2.file 3.Sqlite 4.ContentProvide 5.网络存储 7.如何做多设备支持? 个人理解为屏幕适配,不知道出题者的意图 8.Android 的布局方式有哪些?分别是如何实现 OnDraw 的? LinearLayout,RelativeLayout,TableLayout,FrameLayout,AbsoluteLayout,GridLayout 9.ScrollView 是否可以和 listView 混合使用?如何可以,说明混合使用的方式,如果不行,说 明原因。 可以,计算整个 ListView 的高度,填充数据后重新设置 ListView 高度,重写 onMeasure 和 onInterceptTouchEvent 方法 10.在创建 fragment 时如何传递初始化参数? Fragment 初始化一定要提供默认构造函数。不能用构造函数传递参数!不要写带参数的构 造函数。在 Fragment 里添加获取 Fragment 的 newInstance 函数,以后获取 Fragment 就使用 这个函数,不要使用构造函数新建 Fragment!使用 setArgument 和 getArgument 传递参数 --------------------- 作者:playboy1314 来源:CSDN 原文:https://blog.csdn.net/qq_32865887/article/details/79398095 版权声明:本文为博主原创文章,转载请附上博文链接! 1、四大组件是什么? Activity【活动】:用于表现功能。 Service【服务】:后台运行服务,不提供界面呈现。 BroadcastReceiver【广播接收器】:用来接收广播。 Content Provider【内容提供商】:支持在多个应用中存储和读取数据,相当于数据库。 2、四个组件的生命周期? Activity 图 生 命 周 期 图 及 Fragment 生 命 周 期
Service 的生命周期:首先 Service 有两种启动方式,而在这两种启动方式下,它的生命周期 不同。 通过 startService()方法启动的服务 初始化结束后系统会调用 void onStart(Intent intent) 方法,用于处理传递给 startService() 的 Intent 对象。如音乐服务会打开 Intent 来探明将要播放哪首音乐,并开始播放。注意: 多次调用 startService()方法会多次触发 onStart()方法。 通过 bindService ()方法启动的服务 初始化结束后系统会调用 IBinder onBind(Intent intent) 方法,用来绑定传递给 bindService 的 Intent 的对象。注意:多次调用 bindService()时,如果该服务已启动则不会再触发此方法。 3、Activity 的四种启动模式对比? Standard:标准的启动模式,如果需要启动一个 activity 就会创建该 activity 的实例。也是 activity 的默认启动模式。 SingeTop:如果启动的 activity 已经位于栈顶,那么就不会重新创建一个新的 activity 实例。而 是复用位于栈顶的 activity 实例对象。如果不位于栈顶仍旧会重新创建 activity 的实例对象。 SingleTask:设置了 singleTask 启动模式的 activity 在启动时,如果位于 activity 栈中,就会复用 该 activity,这样的话,在该实例之上的所有 activity 都依次进行出栈操作,即执行对应的 onDestroy()方法,直到当前要启动的 activity 位于栈顶。一般应用在网页的图集,一键退出 当前的应用程序。 singleInstance:如果使用 singleInstance 启动模式的 activity 在启动的时候会复用已经存在的 activity 实例。不管这个 activity 的实例是位于哪一个应用当中,都会共享已经启动的 activity 的实例对象。使用了 singlestance 的启动模式的 activity 会单独的开启一个共享栈,这个栈中 只存在当前的 activity 实例对象。 4、Activity 在有 Dialog 时按 Home 键的生命周期? 当我们的 Activity 上弹出 Dialog 对话框时,程序的生命周期依然是 onCreate() ---> onStart() ---> onResume(),在弹出 Dialog 的时候并没有 onPause()和 onStop()方法。而在此时我们按下 Home 键,才会继续执行 onPause()和 onStop()方法。这说明对话框并没有使 Activity 进入后台,而 是在点击了 Home 键后 Activity 才进入后台工作。 原因就是,其实 Dialog 是 Activity 的一个组件,此时 Activity 并不是不可见,而是被 Dialog 组件覆盖了其他的组件,此时我们无法对其他组件进行操作而已。 5、两个 Activity 之间跳转时必然会执行的是哪几个方法? 首先定义两个 Activity,分别为 A 和 B。
分享到:
收藏