摘要:最近京东搞了个 TGT 计划,针对顶尖青年技术天才,直接宣布不设薪资上限。TGT 计划面向范围包括 2023 年 10 月 1 日到 2026 年 9 月 30 日毕业的海内外本硕博毕业生。时间范围还挺宽松的,有想法的同学可以试一试。
最近京东搞了个 TGT 计划,针对顶尖青年技术天才,直接宣布不设薪资上限。TGT 计划面向范围包括 2023 年 10 月 1 日到 2026 年 9 月 30 日毕业的海内外本硕博毕业生。时间范围还挺宽松的,有想法的同学可以试一试。
京东这两年一直在高薪招人,去年东哥给的年终也很吸引人。零售部门 A+ 能拿满 8 个月,锁定 20 薪。
今天分享几位同学京东后端社招和实习的面经,大家一起来查缺补漏,完善自己的技术栈。
底层数据结构不同:
ArrayList:基于动态数组实现,元素在内存中连续存储。LinkedList:基于双向链表实现,元素通过节点链接,内存中不需要连续存储。性能区别:
1)ArrayList:
随机访问速度快,查找元素的时间复杂度为 O(1)。插入和删除操作慢,尤其是在中间插入或删除时,时间复杂度为 O(n),因为需要移动后续元素。2)LinkedList:
随机访问速度慢,查找元素的时间复杂度为 O(n)。插入和删除操作快,尤其是在头尾插入或删除时,时间复杂度为 O(1)。常见有以下五种方式创建使用多线程:
1)实现 Runnable 接口:
实现 Runnable 接口的 run 方法,使用 Thread 类的构造函数传入 Runnable 对象,调用 start 方法启动线程。例子:Thread thread = new Thread(new MyRunnable); thread.start;2)继承 Thread 类:
继承 Thread 类并重写 run 方法,直接创建 Thread 子类对象并调用 start 方法启动线程。例子:MyThread thread = new MyThread; thread.start;3)使用 Callable 和 FutureTask:
实现 Callable 接口的 call 方法,使用 FutureTask 包装 Callable 对象,再通过 Thread 启动。例子:FutureTask task = new FutureTask(new MyCallable); Thread thread = new Thread(task); thread.start;4)使用线程池(ExecutorService):
通过 ExecutorService 提交 Runnable 或 Callable 任务,不直接创建和管理线程,适合管理大量并发任务。例子:ExecutorService executor = Executors.newFixedThreadPool(10); executor.submit(new MyRunnable);5)CompletableFuture(本质也是线程池,默认 forkjoinpool):
浏览器会解析 URL,然后经 DNS 解析、缓存检查、DNS解析获取服务器IP、TCP三次握手建立连接、发送HTTP请求与接收响应、浏览器解析资源并渲染页面等核心步骤,浏览器最终会接收到服务器返回的响应,进行页面渲染展示。
欢迎来【面试鸭 - 程序员求职面试刷题神器,高频编程题目免费刷】获取更多详细题解。
DNS 会将查询结果临时存储在本地,以减少 DNS 解析的次数。 当用户访问某个域名时,如果缓存中已有对应的解析结果,就可以直接使用缓存数据,而不需要重新请求 DNS 服务器。
工作中常用的就是单例模式、简单工厂、策略、模板等设计模式。需要确保某个类只有一个实例,并提供一个全局访问点的时候,就能用到单例模式。很多时候设计模式在工作中都是组合使用的。
AOP(Aspect-Oriented Programming,面向切面编程) 是一种编程范式,AOP 的核心思想是将与业务逻辑无关的横切关注点抽取出来,通过声明的方式动态地应用到业务方法上,而不是将这些代码直接嵌入业务逻辑中。
比如 Calendar:
▼java复制代码Calendar calendar = Calendar.getInstance;比如 Logger:
▼java复制代码Logger logger = Logger.getLogger(MyClass.class.getName);进程:是资源分配的基本单位,进程之间是相互独立的。
线程:是 CPU 调度的基本单位,属于进程,一个进程中可以包含多个线程。
协程(Coroutine)是一种轻量级的线程,它允许在执行中暂停并在之后恢复执行,而无需阻塞线程。
篇幅限制,各通信方式的详细介绍可以【进程之间的通信方式有哪些? - 面试鸭 - 程序员求职面试刷题神器】。
上【面试鸭】,获取更多面试题解和扩展知识。
它们都是 Java 中常用的线程安全的哈希表实现,它们主要在性能有显著的差异。
因为在线程安全性上的实现方式不同,导致了它们性能上的差别:
Hashtable:Hashtable 使用的是单一的锁机制(全表锁),即对整个哈希表进行同步,所有的操作(如插入、删除、查找等)都必须通过一个锁(synchronized)来保证线程安全。这种方式使得 Hashtable 在多线程环境下效率较低,因为无论是读取还是写入操作都需要获得锁,无法做到并发访问。ConcurrentHashMap:在 Java 8 中,ConcurrentHashMap 采用了 CAS + synchronized 的方式进行线程安全控制。CAS 用于无锁的写入操作。如果某个 Node 节点为空,则通过 CAS 将数据插入节点。如果不为空,则会退化到 synchronized。使用 synchronized 锁定冲突节点的头结点。这种锁的粒度更细,仅锁住特定的冲突节点,而非整个表,因此在并发访问时性能较好。高的并发性能。11,介绍一下 Cookie、Session 和 Token 的区别?在反序列化过程中,程序未对输入数据进行严格的验证,恶意用户可能发送伪造的序列化数据,利用程序漏洞执行任意代码或操作。
简单来说就是在反序列化中的数据夹带私货,让程序执行一些危险操作。
Redis 通常应用于缓存、实时系统、消息队列、分布式锁、计数器等场景。
使用举例:基于内存的高性能键值对存储,在项目中负责分布式 Session 存储、限流功能的实现。
来源:程序员鱼皮