阿里大淘宝 电话面试

阿里大淘宝 电话面试 1h

  1. linux中,哪些命令对大文本(日志文件或其他信息)中信息进行处理?

  2. java多态的实现方式,内部机制

  3. java泛型的本质、好处、实现方式

  4. java中的有哪些列表类型

    ArrayList和LinkedList都继承了哪些类

    他们两个是线程安全的吗,如果不是会带来什么问题?怎么实现线程安全,java内是如何实现的

  5. JVM出现问题,使用过哪些命令进行定位排查

  6. 软件的设计模式都有哪些,简单描述,结合spring框架

  7. 软件的设计原则有哪些 开闭原则和单一职责原则是否冲突了

  8. 设计模式和设计原则之间的关系

  9. java线程的状态,哪些方式创建一个线程

  10. 线程池的拒绝策略

    设置线程池大小的依据原则

    把线程池大小设置越大越好吗?

  11. 项目:订单号,全局唯一id,有哪些方式生成,项目中是如何使用的?

  12. 项目:什么是敏捷开发 瀑布开发?

  13. 其他:最近关注的技术上的事情

总结:面试的内容不多,但有一定深度,在学习的过程中要更加系统一些,碎片化知识不利于知识沉淀。

  1. linux中,哪些命令对大文本(日志文件或其他信息)中信息进行处理?

    (35条消息) Linux 查看大日志文件_linux 大日志文件怎么看_ilpanda的博客-CSDN博客

    Linux 命令大全 | 菜鸟教程 (runoob.com)

    • tail命令,显示文件结尾的内容:[root@localhost ~]# tail [选项] 文件名
      • 查看正在滚动的日志文件使用tail -f file命令
    • less命令,查看文件内容:[root@localhost ~]# less [选项] 文件名
      • less -n file,按F,类似tail -f效果,按G,滚动到最底部
    • grep命令,查找文件内容:[root@localhost ~]# grep [选项] 模式 文件名
      • grep 'key word' log.txt -A 20 // 列出包括匹配行之后 20 的行。 grep 'key word' log.txt -B 20 // 列出包括匹配行之前 20 的行。 grep 'key word' log.txt -C 20 // 列出包括匹配行前后各 20 行。
    • sed命令,流编辑模式(逐行扫描文件),根据提供的脚本命令来编辑数据[root@localhost ~]# sed [选项] [脚本命令] 文件名
    • awk命令,更加强大的文本数据处理工具[root@localhost ~]# awk [选项] '脚本命令' 文件名
  2. java多态的实现方式,内部机制

    Java的多态与实现_牛客博客 (nowcoder.net)

    • 实现方式:

      • 编译时多态(静态多态):方法的重载
      • 运行时多态(动态多态):类实现接口;子类继承父类
    • 继承实现多态的内部机制——动态绑定机制

      在调用方法时,实际上必须首先完成实例方法的符号引用解析,解析后得到的是该实例方法在方法表的偏移量。

      ​ 接下来加载实际的子类类型,根据偏移量从子类的方法表中拿到实际的方法入口地址(直接引用)进行调用

  3. java泛型的本质、好处、实现方式

    本质:参数化类型,也就是说所操作的数据类型被指定为一个参数。

    好处:既实现了编写一次,万能匹配,又通过编译器保证了类型安全

    实现方式:擦拭法 - 廖雪峰的官方网站 (liaoxuefeng.com)——拓展:擦拭法的局限?

  4. java中的有哪些列表类型

    ArrayList和LinkedList都继承了哪些类

    他们两个是线程安全的吗,如果不是会带来什么问题?怎么实现线程安全,java内是如何实现的

    • java中的有哪些列表类型

      • ArrayListObject[] 数组
      • VectorObject[] 数组,线程安全的
      • LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)
    • 关于ArrayList和LinkedList继承类与实现接口的比较 - 简书 (jianshu.com)

    • 它们都不是线程安全的,线程不安全可能会出现多个线程先后更改数据造成所得到的数据是脏数据,举例:ArrayList在添加元素时,其中会有两步操作:

      1. elementData[s] = e;
      2. size = s + 1;

      在多线程情况下,有两个线程,线程 A 先将元素存放在位置 0。但是此时 CPU 调度线程A暂停,线程B得到运行的机会。线程B也向此 ArrayList 添加元素,因为此时 Size 仍然等于 0 ,所以线程B也将元素存放在位置0。然后线程A和线程B都继续运行,都增加 Size 的值。 最后 ArrayList 中元素实际上只有一个,存放在位置 0,而 Size 却等于 2。

    • 如何实现线程安全:悲观锁 / 乐观锁(版本号机制、CAS)

    • java中的实现:

      1. Collections.synchronizedList(new LinkedList<String>())
      2. LinkedListArrayList换成线程安全的集合,如CopyOnWriteArrayListConcurrentLinkedQueue(synchronized实现)
      3. Vector(synchronized实现)
  5. JVM出现问题,使用过哪些命令进行定位排查

    Java问题诊断和排查工具(查看JVM参数、内存使用情况及分析) | Java程序员进阶之路 (tobebetterjavaer.com)

  6. 软件的设计模式都有哪些,简单描述,结合spring框架

    Spring 中的设计模式详解 | JavaGuide(Java面试+学习指南)

  7. 软件的设计原则有哪些 开闭原则和单一职责原则是否冲突了

  8. 设计模式和设计原则之间的关系

  9. java线程的状态,哪些方式创建一个线程

    • 线程的六个状态:Java 线程状态变迁图
    • 线程创建的方式:
      • 创建一个类继承Thread类,并重写run方法。
      • 创建一个类实现Runnable接口,并重写run方法。
      • 实现Callable接口,重写call()方法,这种方式可以通过FutureTask获取任务执行的返回值。
  10. 线程池的拒绝策略

    设置线程池大小的依据原则

    把线程池大小设置越大越好吗?

    • 线程池的拒绝策略

      • ThreadPoolExecutor.AbortPolicy
      • ThreadPoolExecutor.CallerRunsPolicy
      • ThreadPoolExecutor.DiscardPolicy
      • ThreadPoolExecutor.DiscardOldestPolicy
    • 设置线程池大小的依据原则

      CPU 密集型任务(N+1): 这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1。比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响。一旦任务暂停,CPU 就会处于空闲状态,而在这种情况下多出来的一个线程就可以充分利用 CPU 的空闲时间。

      I/O 密集型任务(2N): 这种任务应用起来,系统会用大部分的时间来处理 I/O 交互,而线程在处理 I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程使用。因此在 I/O 密集型任务的应用中,我们可以多配置一些线程,具体的计算方法是 2N。

    • 把线程池大小设置越大,会增加上下文切换成本,意味着消耗了大量的 CPU 时间。

项目:订单号,全局唯一id,有哪些方式生成,项目中是如何使用的?

简单聊聊电商系统的订单号生成规则 | 人人都是产品经理 (woshipm.com)

5 种全局 ID 生成方式、优缺点及改进方案 - 腾讯云开发者社区-腾讯云 (tencent.com)

项目:什么是敏捷开发,瀑布开发,区别?

最近关注的技术上的事情

#我的实习求职记录#
全部评论
哪个部门哇
点赞 回复 分享
发布于 2023-04-22 10:32 湖北
问这么多?😫你几号收到的面试通知?为啥我一点动静都没有。。
点赞 回复 分享
发布于 2023-04-30 00:00 山西

相关推荐

4 39 评论
分享
牛客网
牛客企业服务