跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

Android 一线大厂面试真题整理:操作系统 Java 网络与架构

Android 一线大厂面试真题汇总,涵盖操作系统、计算机网络、Java/Kotlin 基础、Android 核心机制、常用三方库及开放性问题。内容涉及进程线程、死锁、IO 模型、HTTP/TCP 原理、设计模式、JVM 内存管理、Handler 机制、Binder 通信、LeetCode 算法题等高频考点,旨在帮助开发者系统复习并应对大厂技术面试。

月光旅人发布于 2025/2/7更新于 2026/6/318 浏览
Android 一线大厂面试真题整理:操作系统 Java 网络与架构

操作系统/计网

进程和线程?线程的轻量级的体现在哪里? 一个进程可以有多个线程,线程是 CPU 调度的最小单位,进程是资源分配的最小单位。轻量级体现在线程共享进程的资源(如内存空间),创建和切换开销比进程小。

线程 crash 进程会不会 crash? 在 Java 语言中,线程 crash 通常不会导致整个进程 crash,但进程内不同线程之间的内存是共享的,一个线程的 crash 可能导致其他线程访问到不正确的数据,进而引发其他线程异常。

死锁了解吗?说一下死锁产生的四个必要条件?有什么算法能避免死锁吗? 四个必要条件:互斥(一个资源一次只能分配给一个线程使用)、不可剥夺(一个线程不能强行占有其他线程已经占有的)、请求和保持(一个线程在等待其他进程释放资源的同时,继续占有已经拥有的资源)、循环等待条件(A 等 B 等 C 等 A)。银行家算法可用于避免死锁。

操作系统中 cpu 调度算法有哪些?你觉得其中最好的一种是? 分为抢占式和非抢占式。具体包括:先进先执行 FCFS、最短优先 SJF、优先级调度算法(隔一段时间被迫交出 CPU)等。没有绝对最好的算法,需根据场景选择。

操作系统 IO 模型

  1. 同步阻塞:从开始阻塞到结束。
  2. 同步非阻塞:开始到资源就绪轮询,资源拷贝阻塞。
  3. IO 多路复用:poll&epoll 机制,Handler 处理。
  4. 异步非阻塞:回调式。
  5. 异步阻塞:Kotlin 协程 suspend 底层原理利用了 Continuation 实现了 CPS 转换,回调地狱应算作异步阻塞。

进程通信方式 管道(只能在有亲缘关系进程间单向流动)、有名管道(允许无亲缘关系进程间单向流动)、消息队列、共享内存、信号量(控制多个进程对共享资源的访问,常用于文件锁)、套接字(可用于网络)、信号(通知进程某个事件已经发生)。

解释性语言 vs 编译型语言 Java 编译成 class,在不同平台使用不同虚拟机解释执行。C 语言编译成二进制文件,不同平台可执行的二进制文件不同。

架构?MVVM/MVP 区别 MVC:View 触发事件传递给 Controller 通知 Model 数据变化刷新 View。MVP:Model 和 View 彻底解耦,Presenter 持有两者的接口进行操作。MVVM:Model 和 View 彻底解耦,ViewModel 实现数据双向绑定,比如 Google 的 Databinding,这时我们其实还需要写 BindAdapter。

https 与 http 的区别,数字签名? HTTPS 多了一层 TLS/SSL。数字签名将服务器发来的密文用签发机构的公钥解密,然后和服务器的信息的 hash 值进行对比。

DNS 解析怎么做的?DNS 劫持如何避免? DNS 解析就是根据指定的域名,记录类型 (A, AAAA, CNAME, MX, NS),记录值找到指定的服务器或跳转到其他域名。避免 DNS 劫持可以在 OkHttpClient 中自定义自己的 DNS。

http 状态码 100/102 continue, 206 分段内容,301 永久/302 临时重定向/304 NotModified, 401 未授权/403 Forbidden 服务器拒绝请求/404 NotFound, 500 服务器内部错误/502 网关错误/503 服务暂时不可用。

http2 多路复用 基于二进制分帧层,HTTP 消息被分解为独立的帧并行发送出去,最后在另一端根据流 ID 重新组合。

http 几个版本的不同 1.1:多条连接承载多个请求;2.0:单条连接多路复用;3.0:基于 QUIC 实现快速可靠的 UDP 连接。

get 与 post 请求的区别?get 与 post 携带数据的区别 GET 往往使用 FormUrlEncoded 这种方式将请求参数编码在 URL 中,POST 往往会在 body 中包含数据。且 GET 请求一般带有缓存,POST 没有。GET 发送一次,POST 会先发送一次 header,服务端响应 100 continue,然后再发送真实数据,响应 200。

浏览器输入 url 发生了什么 构建请求 -> DNS 解析 -> 发起 TCP 连接 -> 发送 HTTP 请求 -> 服务端响应 HTTP 请求 -> 客户端处理请求。

TCP 原理,如何实现可靠传输,除了三次握手和四次挥手还有哪些机制? ACK(服务端返回收到的最后一次正确的 seq+1)、流量控制、拥塞控制。

为什么要三次握手/四次挥手

  1. 三次握手:SYN->SYN+ACK->ACK。如果变成两次握手,如果第一次 SYN 包发送出去但是暂未成功建立连接,而在客户端重试之后原来失效的连接又被成功发到了服务器使得服务器又使用原来的 SYN 包建立起了连接,不符合预期。
  • 四次挥手:FIN->ACK, FIN->ACK。其中一方通知关闭之后另一方回应收到,然后等待成功关闭后回应 FIN 包,然后另一端回应 ACK,连接结束。
  • tcp 长连接和 http 长连接区别 HTTP header (Connection: keep-alive),指的是一个连接会保持一段时间,而不是传输完数据就直接断开。TCP 长连接指的是 TCP 保活计时器,HTTP 的长连接本质上是 TCP 的长连接,TCP 的长连接通过心跳包建立。

    UDP 如何实现可靠传输 QUIC:基于 UDP,减少了握手时间,避免队头阻塞的多路复用。

    怎么优化首页加载速度 (从数据传输方面) 使用 HTTP3.0,加入缓存机制,Protobuf,预加载机制,服务端优化查询策略,DNS 解析存储 IP,跳过查找过程服务端进行压缩,数据分页传递等。

    说一下你熟悉的设计模式? Factory, Builder, Adapter, Observer, Proxy, Singleton 等。

    设计模式六大原则 开闭原则(扩展开放,修改关闭)、里氏代换原则(基类可以出现的地方,子类一定可以替换)、依赖反转原则(面向切面编程而不是具体的实现)、接口隔离原则(使用多个隔离接口解耦)、最少知道原则(尽可能少的与其他实体相互作用,系统功能模块相对独立)、合成复用原则(使用组合而不是继承)。

    Java/Kotlin

    1. 多态能解决什么问题,多态的底层原理 invokespecial(init 及私有方法)/invokevirtual(虚方法检查父类)。
    2. 泛型是什么,泛型上界下界?如何反射获取泛型类型 泛型是在同一份代码上操作多种类型。上界 extends(out),下界 super(in)。Field.genericType。
    3. Java 内部类和静态内部类的区别 是否可以访问外部类的属性。
    4. 接口和抽象类的区别?抽象类和接口的使用侧重点知道吗? 抽象类是对整个类的抽象,接口是对局部行为的抽象。
    5. 容器类了解哪些?说说 copyonwrite 容器的应用场景 set, map, list, deque。CopyOnWrite:并发读多写少的场景。
    6. ArrayList 扩容机制 默认 10,每次扩 1.5 倍 (oldCap + oldCap >> 1)。
    7. HashMap 底层数据结构 数组 + 链表 + 红黑树 (1.8+)。不线程安全,扩容乘 2,负载因子默认 0.75。
    8. Hashmap 的 Concurrentmodification 异常怎么产生的 HashMap 迭代时添加或删除元素。
    9. HashMap put 时的流程是怎么样的 高低 16 位异或得到 hash,空间不够的话进行 resize,之后通过 hash&(容量 -1) 异或得到储存位置。如果当前位置没元素或者 keyObject 相同,那么直接新建或者修改他们的 value。如果 hash 冲突那么就使用查找或者添加,如果 hash 冲突严重就会使用红黑树进行查找或者添加。
    10. 红黑树如何自平衡?为什么树化的阈值为 8? 泊松分布命中概率太低了。
    11. 为什么 hashmap 的长度必须是 2 的指数? 因为长度是 2 的指数的时候 hash&(n-1)=hash%n,hashmap 中的 tabSizeFor 方法也会找到刚刚比需要容量大的 2 的 n 次方的容量。
    12. LinkedHashMap 底层 在 hashmap 的 node 的基础上给它增加了当前元素的前节点和后节点。
    13. ConcurrentHashMap 底层 JDK1.7 使用分段锁,JDK1.8 使用 CAS+synchronized。
    14. 三个关键字什么区别 final(对象关键字,代表不可变。类关键字)、finally(异常处理,不管有无异常均执行) 与 finalize(对象被回收时回调,但并不能确保,建议使用 PhantomReference)。
    15. 死锁 (写一个) 悲观锁 乐观锁 死锁示例:两个线程互相持有对方需要的锁。悲观锁假设冲突,乐观锁假设无冲突。
    16. volatile 与 synchronized 都是什么?他们的区别 volatile 保证了内存的可见性,对变量的读写会直接刷新到主存。synchronized 既可以保证可见也可以保证原子。
    17. synchronized 代码块原理 我们在字节码里面可以看到,是在语句之前插入了一个 monitorenter,如果线程进入数为 0 就将进入数设为 1,如果当前线程已经持有了 monitor,那么就继续 +1(可重入)。语句之后插入了一个 monitorexit,每次会将进入数 -1,进入数为 0 可以理解为释放掉了锁。
    18. wait 和 sleep 的区别 wait 是让出对象锁,sleep 就是阻塞线程一段时间后继续执行。
    19. java 开启一个线程的方式 线程池,new Thread。
    20. Thread.start() 与直接调用 run() 的区别 start 是启动新线程执行内部的 runnable,run 方法是 Thread 继承 Runnable,实现了 run 方法,直接执行 runnable#run。
    21. threadlocal 原理 每个线程都拥有一个属于它们的 ThreadLocalMap,相当于一个精简的 Hashmap,ThreadLocal 的 get 就是从这些 map 中获取指定的键值对。
    22. Java 默认提供了几种线程池,有哪些参数 ThreadPoolExecutor(核心线程数 corePoolSize, 最大并发数 maximumPoolSize, 空闲回收超时 AliveTime, 阻塞队列 workQueue, threadFactory, 超出 maxPoolSize+queue 大小时,任务交给 RejectedExecutionHandler 处理)。
    23. 有哪些常用线程池? newFixed(指定线程池大小,全部是核心线程,空闲立即回收,阻塞队列无限), newCached(无核心线程,默认 60s 回收,无空间阻塞队列), newSingle/Scheduled…
    24. 线程池 4 种拒绝策略 丢弃,抛出异常/丢弃,不抛出异常/丢弃最早的任务,重新提交新的/由调用线程处理这个任务。
    25. synchronized 与 reentrantlock 内部实现方式的区别 synchronized 是在 JVM 层面,不能主动释放锁,非公平锁。reentrantlock 是 Java 代码层面,可以主动释放锁,也可以是公平锁。ReentrantLock 底层实现通过 AQS 实现,AQS 内部通过 CAS 调用 Unsafe 类的 park/unpark 方法实现线程的阻塞和继续运行。
    26. synchronized 是什么锁? 偏向锁向轻量 CAS 到重量锁的过程。
    27. java 注解用法 比如说可以通过动态代理反射读取一些注解进行一些操作,还可以用 apt,还有字节码插桩。
    28. kotlin 扩展函数原理 编译期转换为静态方法调用。
    29. JVM 运行时内存区 数据 (方法区:类信息,字段信息,常量池/堆内存),指令 (程序计数器/虚拟机栈:基本数据类型,对象引用/Native 栈)。
    30. 如何判断什么样的对象需要回收?GC ROOTS 有哪些 主要有虚拟机栈以及 Native 方法区中引用的对象。
    31. Python 如何实现的断开循环引用 引用计数 + 标记清除。
    32. 分代收集使用不同算法的原因 新生代对象存活率低,老年代对象存活率高。
    33. 方法执行之前发生了什么 首先加载 class 文件,验证准备解析,然后执行父类构造,子类构造,成员变量初始化,然后执行方法。
    34. System.out.println('a')将字符输出到屏幕发生了什么 一个 Synchronized 的方法将字符串输出到 System.out.textOut 中然后 flushBuffer。
    35. 成员变量与局部变量的区别?局部变量的值一定是存放在堆中吗 成员变量在堆,局部变量在栈。
    36. AQS 原理 AbstractQueuedSynchronizer,核心是 state 和 CLH 队列。
    37. jvm 类加载的时机 调用静态方法/new 对象/反射调用/.class。
    38. 根类加载器加载什么类 jre 包下的类 rt.jar(BootstrapClassLoader)。
    39. jvm 类加载过程 加载/验证准备解析/初始化使用卸载。
    40. 双亲委托机制是什么 父加载器先尝试加载,失败后再由子加载器加载。
    41. 双亲委托机制什么时候会被破坏 通过 Thread#setContextClassLoader 给线程设置一个自定义 ClassLoader/ClassLoader.getSystemClassLoader().getParent() 得到 AppClassLoader 的父类,然后加载我们需要的 Class。
    42. Class.forName 和 ClassLoader.loadclass 的区别 Class.forName 会进行初始化,loadclass 在完成解析之后便会结束。
    43. 遇到过的异常有哪些? 空指针,数组越界,文件未找到,IOException, NoSuchMethod, OOMError, StackOverflowError。
    44. CAS,自旋锁 Compare And Swap,自旋锁是忙等待的锁。
    45. 四种引用 强引用、软引用、弱引用、虚引用。

    Android

    1. handler 原理 handler 的 post 实际上最终是向 MessageQueue 中通过 enqueueMessage 插入了 Message,并会通过 when 参数保证消息的顺序,同时在插入完成后会通过 nativeWake 唤醒等待的消息队列。Looper 中的 loop 是阻塞的,会阻塞在 message 的 next 方法中,这个阻塞是通过 nativePollOnce 实现的,并会传递超时时间,若超时或者被 nativeWake 唤醒则继续消息队列的循环。
    2. handler 的内存泄露了解吗?如何避免? handler.removeCallbacksAndMessages/静态内部类持有外部 activity 的弱引用,不过当消息队列为空自然会释放,但是,比如说 activity 的 window 已经 detach 了还去操作布局就会出现问题,建议使用生命周期感知刷新界面 (livedata?)。
    3. postDelay 源码 涉及 MessageQueue 的延时插入逻辑。
    4. 两个 Message 相隔 5 秒,这 5 秒内线程会一直阻塞吗 会,直到时间到达或被唤醒。
    5. view 绘制流程,怎样优化 Measure/Layout/Draw。优化包括减少层级、使用硬件加速、避免频繁 invalidate。
    6. include, viewStub, merge 的使用和区别 include 复用布局,viewStub 延迟加载,merge 去除根标签。
    7. 怎么获取 view 的宽高,如何确定值是准确的 onWindowFocusChanged/view.post()/viewTreeObserver.OnGlobalLayoutListener。
    8. view.post 和 handler.post 的区别? View.post 如果还没有 attach 到 window 上面会先把消息插入到 Queue,在 ViewRootImpl#performTraversal 后执行。
    9. requestLayout 和 invalidate 的区别 重新调用 onMeasure,onLayout/重新 onDraw。
    10. 知道消息是怎么插入到消息队列的吗? enqueueMessage 方法。
    11. 广播注册有哪些方式? / registerReceiver(receiver, intentFilter)。
    12. 启动流程、绘制流程、事件分发 ActivityManagerService 管理启动,ViewRootImpl 管理绘制,dispatchTouchEvent 管理分发。
    13. 遇到过滑动冲突吗?滑动冲突的解决方法 父 View 是否 intercept,是则父 View#onTouch,否则子 View#dispatch。
    14. 自定义 View 如何特殊处理 wrap_content, padding 的实现 给子 View 也传 AT_MOST 过去让子 View 都测量一遍,然后计算出我这个 View 实际尺寸。
    15. 属性动画和补间动画的区别 属性动画反射 setter 方法调用,真实改变 view 的属性,可以作用于任意对象,不只是 View,且而补间动画可能只会改变 view 的 translationXY,只能作用与 View。
    16. 点击桌面上的 App 启动发生了什么 Launcher 通过 Intent 启动 Activity,这里会调用 AMS,之后通知 AMS 创建应用进程,之后 ActivityThread.main(),之后创建出第一个 Activity,执行各种生命周期,onCreate#setContentView 的方法让 activity 创建的 PhoneWindow 创建 ViewRootImpl,里面会有一个 decorView,decorView 中的 content 就是 activity 的布局。
    17. Android 四大组件 Activity, Service, BroadcastReceiver, ContentProvider。
    18. Service 优先级 前台进程,可见进程,服务进程,后台进程,空进程。
    19. Service 使用场景,如何绑定服务 startService/startForegroundService/bindService。
    20. 不使用 startForegroundService 可以启动前台服务吗 高版本限制严格,建议遵循规范。
    21. Service 的两种启动方式和生命周期 create->(un)bind/onStartCommand->destroy,onStartCommand 在每次 startService 都会调用,onBind 只在第一次 bindService 调用。
    22. 广播分类 普通广播 (sendBroadcast)、有序广播 (sendOrderedBroadcast)、异步 (粘性) 广播 (已经弃用,发出广播会一直等待 Receiver)。重写 BroadcastReceiver#onReceive。
    23. Activity 的启动模式及其应用场景 standard(打开后可以返回原 app)/singleTop(创建 Activity 加入栈顶,如已有则拿到栈顶 onNewIntent)/singleTask/singleInstance(调用支付宝支付)。
    24. onSaveInstance 调用的场景 语言字号,屏幕尺寸方向发生改变。
    25. Activity taskAffinity 了解吗 任务亲和性,决定 Activity 归属哪个 Task。
    26. 横竖屏转换发生了什么,onNewIntent 有什么用 销毁重建或配置更新。onNewIntent 用于 singleTop/Task/Instance 模式下接收新 Intent。
    27. Activity 生命周期,每个生命周期事件代表了什么样的含义 create 正在被创建/restart 重新启动/onstart 即将启动/onResume 用户可交互/onPause/onDestory 销毁。
    28. 启动一个活动 A,接着在 A 中启动活动 B,各自的生命周期变化?如果 B 活动是透明的呢?如果此时再启动第三个活动 C,三个活动的生命周期变化? A:onPause->B:onCreate->onStart->onResume; B 透明则 A 不停止; C 启动则 B 暂停。
    29. fragment 的生命周期了解吗? onAttach:与 Activity 建立关联,onCreateView:创建视图时使用,onViewCreated,onDestroyView,onDetach。
    30. RecyclerView 和 ListView 区别,RecyclerView 缓存机制 RecyclerView 四级缓存:mAttachedScrap(预布局时储存不变的 VH)+mChangedScrap(变了的 VH,用来执行动画)/mCacheViews(默认缓存两个)/mViewCacheExtension/RecycledViewPool(SparseArray,不同 itemType 使用不同缓存 List)。ListView 离屏缓存 View,从 mScrapViews 根据 pos 获取相应缓存,getView 后进行 bindView。
    31. IPC 有哪些?ContentProvider 细讲? Binder, Socket, SharedMemory。ContentProvider 用于跨进程数据共享。
    32. Binder 的原理,共享内存原理? Binder 是 Linux 内核驱动,支持零拷贝。共享内存允许多个进程访问同一物理内存。
    33. AIDL 有了解过吗 服务端 onBind 实现 AIDL 接口 Stub 对象,客户端.Stub.asInterface(iBinder)。
    34. 如何自己做 ANR 监测,设计一下 监听主线程消息队列耗时,超过阈值上报。
    35. 如何做 crash 检测 全局异常捕获,日志上传。
    36. 为什么会发生 OOM? 图片视频,循环中创建大量对象 (包括 onDraw),内存泄漏 (Handler?)。
    37. Android 热修复有哪几种方案? tinker/robust, andfix 不太行。
    38. SharedPreference commit 和 apply 方法的区别以及它们的缓存机制? commit 同步写入磁盘,apply 异步写入内存。
    39. SharedPreference 要多进程怎么办 使用 FileMode.MODE_MULTI_PROCESS 或改用数据库。
    40. 为什么不用 SharedPreference?为什么数据库性能会更好? SP 不适合复杂查询和大文本,数据库支持 SQL 查询和事务。
    41. 怎么去创建一个数据库,有哪些东西是必要的? SQLiteOpenHelper,onCreate, onUpgrade。
    42. Parcelable 轻量的原理是什么 序列化对象为字节流,无需反射,速度快。
    43. 适配浏览器跳转到 APP intent-filter。
    44. SparseArray 针对 int 类型的 Key 优化的 Map,减少装箱拆箱。

    三方库

    1. Dagger 原理 依赖注入框架,编译期生成代码。
    2. ViewModel 怎么实现保存恢复数据,如何创建一个 ViewModel 在横竖屏切换时会调用 onRetainNonConfigurationInstance(onSaveInstanceState 之后),ComponentActivity 重写了这个东西,在其中 ViewModelStore 用来保存了状态,恢复数据的话,就从 getLastNonConfigurationInstance 里面看看有没有上次保存的配置。至于这个保存在 ActivityClientRecord 里面,储存在 Activity#mActivities:ArrayMap<IBinder,ActivityClientRecord> 中。
    3. LiveData 的 onChanged 回调时机 setValue(postValue 实际也调) 时通知每个观察者 onChanged,每次 set 版本号++,因此即使 set 值相同也回调。
    4. LiveData 与 RxJava 的区别 LiveData 生命周期感知,RxJava 更灵活。
    5. LiveData 生命周期感知如何实现,LiveData 原理 setValue 时会分发 (dispatchValue),考虑通知 (considerNotify) 这里就会根据 ObserverWrapper(LifecycleBoundObserver) 根据生命周期决定是否分发。
    6. 介绍 RxJava 响应式编程库,Observable/Observer 模式。
    7. 内存泄漏是什么 有内存无法回收。
    8. 内存泄漏的场景 静态对象 (比如静态集合),单例模式,数据库/网络/文件 IO 等连接不释放,内部类持有外部类引用。
    9. 内存泄漏检测的工具 LeakCanary。
    10. LeakCanary 原理,用了个什么队列 通过 ActivityLifecycleCallbacks 绑定生命周期,在 Activity 销毁后触发就去检查,检查就是构建了一个 WeakReference 并向其提供了一个 ReferenceQueue,之后触发 gc,然后看看引用队列里面有没有元素。
    11. OkHttp 底层,对网络请求做了啥优化 RetryAndFollowUpInterceptor:请求,出错重试,重定向,BridgeInterceptor 加各种 header(cookie),CacheInterceptor:通过 Cache/有无网络综合判断是否使用缓存,ConnectInterceptor:打开连接,也会通过连接池复用 healthConnection,创建 okio IO 流,CallServerInterceptor:发起真正的请求,从 IO 流读取内容。
    12. OkHttp 异步流程中准备队列的进入条件 是一个 ThreadPoolExecutor,maxRequests:64,maxRequestsPerHost:5。
    13. Retrofit 原理 动态代理,拦截器链。
    14. Retrofit 返回的是什么数据类型 Call,不过可以自己写 converter 就可以实现。
    15. Navigation 的优缺点 简化 Fragment 跳转,统一管理导航图。
    16. 如何实现的自定义 navigate 方法切换 fragment,如何让被覆盖的 fragment 感知到生命周期 FragmentTransaction 配合 OnBackStackChangedListener。
    17. 图片框架就是使用 Glide 吗,有自己思考吗 with 创建 RequestManager,创建 fragment 绑定生命周期 (Retriever),如果传入 application 就全局生命周期。load 使用 RequestManager 构建 RequestBuilder,指定 asBitmap/Drawable/Gif 什么的,into 到一个 target,ImageView 会变成一个 ViewTarget,然后 engine.load 依次从三个缓存里面查找,找不到就网络请求。
    18. Glide 缓存有什么优化? 内存缓存 (ResourceWeakReference,LRUCache),磁盘缓存 (DATA/NONE/RESOURCE/ALL/AUTOMATIC)。with 传入 Activity/Fragment 什么的,用来创建空 Fragment 绑定生命周期。

    开放性问题

    1. 项目中有没有遇到问题?怎么解决的
    2. 如果排期只有一周的任务,但是以我的能力需要两周才能完成,这个时候你会怎么办。
    3. 自己是如何学习 Android 的,非科班的学习过程
    4. 实习过程中做的需求说一下
    5. 实习过程中的难点说一个
    6. 实习过程中和哪些人接触的比较多
    7. 如何和别人沟通的
    8. 实习的收获
    9. 挑一个项目说一下
    10. 学习方法,路线
    11. 手写生产者消费者模式,并说一下有哪些解决策略
    12. 最有成就感的一件事
    13. 如何总结提升/排解压力

    算法题参考

    LC: 力扣 JZ: 剑指 Offer NC: 牛客

    1. LC25-k 个一组反转链表
    2. LC445-两个相加,最高位在前,要求时间 O(n), 空间 O(1)
    3. LCJZ77-二叉搜索树的后序遍历序列
    4. LC114,JZ36-树变链表
    5. JZ32-3-z 字形打印
    6. JZ33-给一个数组,判断是否符合二叉搜索树的后序遍历
    7. JZ7-前中数组构造
    8. 根据前序遍历和中序遍历输出后序遍历
    9. LC199-右视图
    10. LC102-树的层序遍历
    11. 判断 A 是否是 B 的子树
    12. 有哪些?几个的场景:稳定/不稳定:冒泡,插排 (数据量不大使用,因为空间 O(1)),归并 (,稳定)/选择,快排,堆排,计数 (数据大小范围不大)
    13. 汉字表示的数字转成阿拉伯表示
    14. LRU
    15. LC47-字符串的全排列 (要求去重)
    16. LC20-判定括号合法
    17. 数组 的读写时间复杂度
    18. 手写单例双重检测,在什么情况下使用单例
    19. 36 进制加法
    20. LC611-有效三角形的个数
    21. NC126-路径总和
    22. LC22/NC26-括号生成,可不可以用回溯?
    23. LC564-最近回文数
    24. ipv4 地址转 32 位 int 输出
    25. LC718 最长公共字串
    26. n 个节点的有多少种?这个最好可以到 O(1) 的
    27. 查找,将这条路上的结点存储

    面试准备建议

    面对大厂面试,除了掌握上述技术点外,还需注意以下几点:

    1. 基础扎实:深入理解计算机基础,如操作系统、网络、数据结构与算法。
    2. 项目经验:能够清晰描述项目架构、难点及解决方案,体现技术深度。
    3. 沟通能力:面试不仅是技术考核,也是沟通能力的考察,表达要清晰有条理。
    4. 持续学习:关注行业新技术,保持学习热情,适应快速变化的技术环境。
    5. 模拟面试:提前进行模拟面试,熟悉常见题型,缓解紧张情绪。

    希望这份整理能帮助各位开发者更好地准备面试,顺利进入心仪的大厂。

    目录

    1. 操作系统/计网
    2. Java/Kotlin
    3. Android
    4. 三方库
    5. 开放性问题
    6. 算法题参考
    7. 面试准备建议
    • 💰 8折买阿里云服务器限时8折了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 🤖 一键搭建Deepseek满血版了解详情
    • 一键打造专属AI 智能体了解详情
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • Google 发布 Med-Gemini 医学大模型:多模态与长文本处理突破
    • LangChain 链式应用实战:多种 Chain 类型详解与案例
    • 非科班背景字节后端面试经历与备战经验分享
    • 7 个实用的 Python 自动化脚本示例
    • 转行大模型入门公开课精选:从基础理论到项目应用
    • Android 开发工程师面试核心知识点与准备指南
    • 清华团队发布 Vidu 大模型,支持 16 秒文生视频生成
    • Ubuntu 22.04 安装 Openclaw 详细教程:配置 AI 员工与多模型接入
    • 网络安全基础入门:主机信息与端口扫描解析
    • mT5 中文-base 部署实战:解决 WebUI 超时与 GPU OOM 问题
    • AI产品经理:核心技能解析与职业发展指南
    • 程序员职场进阶:除代码外需掌握的关键技能
    • 使用 AI 生成个性化头像的完整技术指南
    • FunASR:阿里巴巴开源语音识别工具包及部署教程
    • 自适应图像变焦与边界框变换用于无人机目标检测
    • 前端监控体系搭建:错误捕获、性能与行为分析(Vue 3 + Sentry)
    • 多模态大语言模型在全面长视频理解综述
    • AI 产品经理学习路线:从零基础入门到精通指南
    • 搭建前端开发环境:安装 nvm、Node.js 与 pnpm 配置
    • 文心一言 4.5 开源版本地化部署表现与潜力实测

    相关免费在线工具

    • Keycode 信息

      查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

    • Escape 与 Native 编解码

      JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

    • JavaScript / HTML 格式化

      使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

    • JavaScript 压缩与混淆

      Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online