• 牛客网AI面试题目


    第一轮

    1. 静态库和动态库如何制作及使用,区别是什么
      https://blog.csdn.net/qq_38526623/article/details/110928986
      制作与使用:
      静态库:
      gcc获得.o文件 ->将.o文件打包,使用ar工具(archive)->编译和链接
      动态库:
      gcc得到.o文件,得到和位置无关的代码->gcc得到动态库->编译和链接
      区别:
      ● 静态库是在程序链接阶段被复制到程序中,动态库是在程序运行时被加载到内存中被调用。
      ● 静态库加载速度快,可移植性高,但是比较消耗系统资源,更新部署发布比较麻烦。
      ● 动态库加载速度慢,移植需提供动态库。进程间资源共享,更新、部署、发布比较简单。
    2. 说一说HashMap的实现原理
      在jdk1.7之前HashMap是基于数组和链表实现的,而且采用头插法。
      而jdk1.8 之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。采用尾插法。
      HashMap默认的初始化大小为 16。当HashMap中的元素个数之和大于负载因子*当前容量的时候就要进行扩充,容量变为原来的 2 倍。(这里注意不是数组中的个数,而且数组中和链/树中的所有元素个数之和!)
    3. Serializable接口为什么需要定义serialVersionUID常量
      serialVersionUID常量用于标明当前Serializable类的版本,以验证加载的类和序列化对象是否兼容。
      在进行序列化时会将当前类的serialVersionUID写入到字节序列中,在反序列化时会将当前字节流中的serialVersionUID同本地对象中的serialVersionUID进行对比,如果相同则继续序列化,如果不同则失败报错。
      serialVersionUID常量值默认为1L。
    4. 说一说zset类型的底层数据结构
      zset底层的存储结构包括ziplist或skiplist,在同时满足有序集合保存的元素数量小于128个和有序集合保存的所有元素的长度小于64字节的时候使用ziplist,其他时候使用skiplist。
      当ziplist作为zset的底层存储结构时候,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个元素保存元素的分值。
      当skiplist作为zset的底层存储结构的时候,使用skiplist按序保存元素及分值,使用dict来保存元素和分值的映射关系。
    5. 给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。
      在这里插入图片描述
  • 相关阅读:
    【Spring Boot 源码学习】OnBeanCondition 详解
    今天面了个腾讯拿 38K 出来的大佬,让我见识到了 Java 面试八股文的天花板
    【JavaEE初阶】 synchronized关键字详解
    Shior02(身份认证加密)
    503. 下一个更大元素 II
    ndk-c++
    Android UI freeze分析
    v-model的基本使用,v-model原理;v-model绑定;v-model的值绑定;v-model修饰符
    C++语言深度解析--类型系统和类型安全--const和volatile
    【华为OD机试真题 python】 免单统计【2022 Q4 | 100分】
  • 原文地址:https://blog.csdn.net/AzirBoDa/article/details/126157104