掌阅科技

📍面试公司:掌阅科技一面

💻面试岗位:服务端开发

❓面试问题:

1、网络七层协议

2、平时用到哪些协议

3、ipv6的定义与ipv4的区别

4、BGP、OSPF协议

OSPF一种 内部网关协议(IGP),常用于 自治系统(AS)内部,基于 链路状态算法(Dijkstra 最短路径算法) 来计算最优路径。

BGP(Border Gateway Protocol)一种 外部网关协议(EGP),主要用于 自治系统之间 的路由选择,属于路径矢量协议,互联网核心路由协议。

5、进程和线程的区别

6、非静态内部类访问外部类的原理 (有点猝不及防 脑子一下有点宕机)特此复习一下

在 Java 中,非静态内部类(Inner Class) 可以直接访问外部类的成员(包括 private 修饰的)。 比如:

class Outer {
    private String name = "outer";
    class Inner {
        public void print() {
            System.out.println(name); // 直接访问外部类的私有字段
        }
    }
}

背后原理:,非静态内部类会隐式持有一个对外部类实例的引用

  • 在字节码层面,Inner 类会有一个 合成字段:
  • 当创建内部类实例时,必须依赖一个外部类实例:
  • 编译器会把对外部类成员的访问,转化为通过 this$0 字段来访问:

也就是说,Inner 实际是借助外部类引用来访问外部类的属性和方法。

final Outer this$0;  // 保存外部类的引用
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner(); // 编译器自动传入 outer
System.out.println(this.this$0.name);

补充:

私有成员访问的特殊处理

  • 外部类的 private 成员,内部类也能访问。这是因为 编译器在编译时会生成合成的 access$xxx 方法,供内部类调用。

静态内部类为什么不能访问 外面的实例变量?

  • 静态内部类(static nested class) 在编译后不持有外部类对象引用。
  • 它相当于外部类的一个“静态成员”,跟静态方法类似。
  • 因为它没有外部类实例的 this,所以访问不到外部类的实例变量。
  • 静态内部类能访问什么?外部类的静态成员(字段、方法)。

    7、线程池相关八股

    8、java反射相关

    9、字节码的生成和修改 (答得不好 脑子一热就先讲字节码的内容有哪些了)特此学习:

    字节码的生成方式:

    javac HelloWorld.java # 生成 HelloWorld.class

    • JDK 自带 API:JavaCompiler(编译源码字符串成字节码)。

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

    int result = compiler.run(null, null, null, "HelloWorld.java");

    • ASM / Javassist / Byte Buddy:直接在内存中生成字节码,不需要源码。
    • cglib:基于 ASM 封装,常用于动态代理。

    字节码的修改(字节码增强):

    这里美团技术团队 有这个技术完善的描述:https://tech.meituan.com/2019/09/05/java-bytecode-enhancement.html

    10、java内存管理机制(内存区域划分、年轻代、老年代、GC垃圾收集--在对象存活判定上有点卡壳)

    11、操作系统中的内存碎片

    12、如何排查线上GC问题(没说gc-log 直接说的使用链路监测和arthas)

    13、java动态代理 jdk-cglib 只说了基本的概念和对应的区别,细节用法没说出来

    14、mysql的性能优化

    15、mysql的故障恢复 (说了redo log 恢复 发现面试官脸色不对

    16、mysql 主从复制延迟

    算法:回文素数--- 本人此时因为傻逼 把题目给的回文例子 去验证它的素数属性 发现半天校验不过素数,最后面试官看不下去了 笑着给我说 你刚刚验证的貌似不是素数啊。

    🙌面试感想:第一次遇到全程八股,感觉自己还有很多细节没学到位。还有就是不知道是不是我这边电脑的问题面试官的几次说的话都很糊 让面试官重复了几次。 害,这把玩崩了。

    #掌阅秋招##掌阅科技##发面经攒人品##秋招笔面试记录#
    全部评论
    tql
    点赞 回复 分享
    发布于 2025-09-30 16:55 四川
    同学,瞅瞅我司,校招刚开,点击就送,我的主页最新动态,绿灯直达
    点赞 回复 分享
    发布于 2025-09-23 10:23 湖北
    华为终端云持续招聘中,有意向的滴滴
    点赞 回复 分享
    发布于 2025-09-22 15:08 贵州
    问的一模一样。我算法是归并排序
    点赞 回复 分享
    发布于 2025-09-22 12:43 陕西
    有亿点难啊
    点赞 回复 分享
    发布于 2025-09-22 10:42 重庆
    耐面王
    点赞 回复 分享
    发布于 2025-09-22 10:38 北京
    同学a了几道?一个小时时间还有选择题,我只a了一道程序题就没时间了,结果官网直接终止流程了
    点赞 回复 分享
    发布于 2025-09-22 09:03 江西
    故障恢复binlog和redolog都可以吧
    点赞 回复 分享
    发布于 2025-09-21 17:02 重庆
    故障恢复不就是redolog吗
    点赞 回复 分享
    发布于 2025-09-21 13:46 江苏
    太难了 我也是这家公司 全程八股轰炸 全是问底层怎么实现的 算法lru
    点赞 回复 分享
    发布于 2025-09-20 22:01 陕西

    相关推荐

    04-23 10:31
    已编辑
    山东大学 C++
    拼多多一般多久出结果呢?一面感觉面的依托40分钟面完了。。感觉有点小寄整理一下一面的问题吧也学不进去。(1)门面模式,策略模式、模板方法 (因为项目写了!所以这么问的)门面:为复杂多子系统提供统一简洁接口,隐藏内部繁琐流程,降低调用复杂度,让外部只需一个入口就能使用整套功能。策略: 定义一系列可互换的算法策略,封装各自逻辑,运行时灵活切换算法,不修改原有业务代码,符合开闭原则。模板方法模式定义算法固定骨架流程,将步骤延迟到子类实现,不改变整体执行顺序,子类只重写具体细节,复用算法结构。(2)策略模式和工厂模式区别 (这个问题一直追问我!! 我只知道特别浅浅的东西)!!!工厂模式负责造对象,只关心怎么创建实例;策略模式负责用算法,运行时切换不同业务逻辑,工厂管创建,策略管行为。然后 追问 工厂模式不能做不同策略对象吗? 工厂造出策略对象,再交给策略模式去调度使用,二者分工完全不一样 然后又追问他们使用场景 多个同类对象,创建逻辑复杂多变,不想让业务代码直接 new 对象,统一封装创建,解耦对象生成与使用。 同一业务有多种算法 / 规则切换,比如支付方式、排序规则、优惠计算,运行时灵活替换业务逻辑。又追问 相同点是什么同时他们的区别是什么呢? 回答封装变化、都用到了多态,都降低了耦合、都符合开闭原则。不同点 一个创建对象一个选择对象怎么去干活的。第一个项目项目学到了说明一下 就随便说了一下简历上的东西 然后没有追问下面问rpc框架的东西了 因为简历有rpc。  自研 RPC 让我掌握TCP 粘包解决、动态代理、服务注册发现、负载均衡、SPI 扩展(3) 问怎么处理粘包!! 定消息头 + 长度域的私有协议,先读头获取长度,再按长度读体。(4) 为什么会有粘包的问题: TCP 是面向字节流的协议,没有消息边界,发送方批量发、接收方一次性读,就会出现多条数据粘在一起。(5) 问我tcp为什么是流式的?? 我直接蒙蔽了。。。我咋知道!!!TCP 是流式的,因为它的设计目标是提供一条可靠、有序、连续的字节管道,而不是独立数据包的传输服务。(6) 问我项目设计的 协议消息的格式是什么样子的 让我写道屏幕上 因为确实背了这里写出来了(7)问我 message length代表什么意思 message length 就是消息体的字节长度,告诉接收端要读多少字节才是一条完整消息,是解决 TCP 粘包半包的核心字段。(8)因为我使用的是recordParser去进行消息的处理然后面试官问我 没有被截取的部分怎么处理呢? 看了recordParser源码所以答出来了 没读完、不完整的字节,我会自动暂存在 Vert.x RecordParser 内部缓冲区里,不丢弃、不处理,等下一次数据到来继续拼接,直到凑够一整帧才交付(9)jdk动态代理是什么 !!(10)jdk动态代理底层是什么 运行时动态生成接口代理类字节码 → 加载进 JVM → 全部方法统一走 invoke () 反射调用 这里好像我当时说的怎么实现动态代理了因为我不知道底层所以当没听见。。。(11)红黑树和跳表的应用区别 redis?红黑树 范围查询慢 HashMap  跳表 插入 / 删除只改指针 范围查询极快(12)为什么空间复杂度都是O(N)(13)除了上面还有什么区别吗? 我又重复了一遍上面的回答。。。因为确实不知道了。。实现难度不同红黑树:极难,要处理旋转、变色、平衡,代码复杂易错。跳表:简单,只用随机层数 + 指针调整,代码短、易维护、易扩展。插入 / 删除稳定性不同红黑树:插入删除可能触发连锁旋转 / 变色,最坏会有O (logN) 次调整,高并发下有抖动。跳表:插入删除只修改前后指针,局部调整,无连锁反应,高并发更稳定。范围查询效率不同红黑树:范围查询要中序遍历,跳转多、缓存不友好,速度慢。跳表:直接在底层连续链表遍历,缓存命中率高,范围查询天生更快。并发场景支持不同红黑树:修改时影响路径多,加锁粒度大,并发性能差。跳表:操作局部化,加锁粒度小,更容易实现无锁 / 细粒度并发。缓存友好度不同红黑树:节点分散,CPU 缓存不友好。跳表:底层是连续链表,缓存命中率更高。(14) 又问他们读取的区别是什么呢?读取时会怎么样红黑树读取(查找)从根节点开始,不断左右跳转,走一条从根到叶子的路径节点在内存中不连续,CPU 缓存命中率低每次比较都可能缓存未命中,读取速度受影响范围查询需要中序遍历,跳转更多,更慢2. 跳表读取(查找)从最高层索引往下跳,快速缩小范围,最后落到底层有序链表底层是连续链表,内存局部性好CPU 缓存更友好,连续读取更快范围查询直接遍历底层链表,几乎无跳转,极快(15) 最后除了两道算法题1、是leetcode 面试150题里面的一个2、实现一个线程安全类 然后又add和remove操作!!都写出来!!42分钟差不多就面完了
    点赞 评论 收藏
    分享
    评论
    6
    39
    分享

    创作者周榜

    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务