字节跳动客户端开发面经(一面)

一面

1. JAVA的堆和栈的区别

栈内存储的是局部变量,堆内存储的是实体

  • 栈内存存储的是局部变量而堆内存存储的是实体
  • 栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短
  • 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收
2.JAVA的GC垃圾回收机制
  • 垃圾回收机制就是JVM利用一些列算法对内存进行管理
  • 回收内存空间,删除无用实例(没有被引用的对象)
  • 自动进行,减少了内存溢出.但同时也牺牲了一定的性能

优化:将不用的变量和指针置位null

3.垃圾回收机制和调用 System.gc()的区别?
  • gc函数的作用是程序员提醒虚拟机,希望进行一次垃圾回收,但是虚拟机并不保证垃圾回收一定会进行。什么时候进行依然取决于虚拟机
4.什么是多态
  • 一个程序中存在多的同名的不同方法,包括
  • 通过子类对父类的覆盖来实现(重写)
  • 通过在一个类中方法的重载来实现(重载)
  • 向上继承:通过子类对象转化为父类对象来实现
5.重写和重载的区别
  • 重写:子类和父类的一种关系,子类继承父类的方法
  • 重载:同一个类中(包括父类)有多个同名的不同方法
6.进程和线程的区别,线程独有什么?
  • 进程是程序的一次执行,进程包含线程,线程是进程中的代码段。
  • 进程通过线程来实现同时运行不同段的代码。
  • 线程的内存范围不允许越过进程。

线程共有的部分:方法区和堆
线程独有的部分:虚拟机栈,本地方法栈,线程计数器

7.你在项目中做过哪些性能优化
  • 代码优化:
    • 尽量重用对象,出现字符串连接时应该使用StringBuilder/StringBuffer代替
    • 尽量使用局部变量(用过释放)
    • 将常量声明为static final
    • 字符串变量和字符串常量equals的时候将字符串常量写在前面
  • 数据库优化:建立一个具有良好表结构的数据库
  • 等等
8.如何优化页面卡顿
  • 拆分代码段
  • 尽量减少使用layout
  • 简化DOM结构
9.Handler消息机制
  • 将耗时的操作放在子线程中处理,handler用来在主线程和子线程中传递信息
10.Android自定义View
  • View是用于创建交互式用户界面组件(按钮、文本等)的基础类
  • View是所有控件(包括ViewGroup)的父类,它里面有一些常见的方法,如果我们要自定义View,最简单的只需要重写onDraw(android.graphics.Canvas)即可。
11.常用的开源框架及其原理
  • Spring框架
12.MVC模式与MVP模式
13.MVC和MVVC怎么理解,开发中怎么用的
14.HTTP常见的请求方式及主要操作
15.HTTP和HTTPS
14.TCP的三次握手是什么?四次挥手
15.用到过的加密算法有哪些?
16.设计模式有哪些?
17.如何实现AOP,用到什么技术?
18.JAVA自带的代理类和cglib有啥不同?
19.消息队列的作用和场景

你可能感兴趣的:(面经)