唯品会面试(部分)

这篇具有很好参考价值的文章主要介绍了唯品会面试(部分)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一面

  • 在聊项目,聊到我们可以访问到一些敏感的用户数据,比如用户信息、订单信息等,面试官问如何保证这些敏感信息的安全性?参考new bing:
    数据加密:对敏感数据进行加密,确保数据在传输和存储过程中不被窃取或篡改。
    访问控制:对敏感数据的访问进行控制,只有经过授权的人员才能访问。
    安全培训:对系统使用人员进行安全培训,提高其安全意识和技能。

  • UV是多少?相关知识:UV(Unique Visitor):独立访客,统计1天内访问某站点的用户数

  • 假如线上某服务CPU占用率很高,QPS很低,响应很慢,你有什么办法定位问题?如果就是某个Java进程CPU占用率很高呢? 汇总new bing以及1的答案:

通过 top命令查看CPU情况,如果CPU比较高,则通过 top-Hp<pid>命令查看当前进程的各个线程运行情况,找出CPU过高的线程之后,将其线程id转换为十六进制的表现形式,然后在jstack日志中查看该线程主要在进行的工作。这里又分为两种情况:

  1. 如果是正常的用户线程,则通过该线程的堆栈信息查看其具体是在哪处用户代码处运行比较消耗CPU;
  2. 如果是 VMThread,则怀疑是否是GC导致CPU占用高。This VM Thread if it is consistently taking a huge amount of CPU could be a precursor to an OOM Heap error. 2

使用jmap命令生成Java进程的内存快照,查看是否存在内存泄漏。
使用jstat命令查看Java进程的GC情况,查看是否存在频繁的Full GC。

此外,如果接口耗时的情况是不定时出现,则可以通过压测的方式加大阻塞点出现的频率,再通过 jstack查看堆栈信息等手段,找到阻塞点。因为如果说该接口中有某个位置是比较耗时的,由于我们的访问的频率非常高,那么大多数的线程最终都将阻塞于该阻塞点,这样通过多个线程具有相同的堆栈日志,我们基本上就可以定位到该接口中比较耗时的代码的位置。如下是一个代码中有比较耗时的阻塞操作通过压测工具得到的线程堆栈日志:

`"http-nio-8080-exec-2"#29 daemon prio=5 os_prio=31 tid=0x00007fd08cb26000 nid=0x9603 waiting on condition [0x00007000031d5000]`

`   java.lang.Thread.State: TIMED_WAITING (sleeping)`

`    at java.lang.Thread.sleep(NativeMethod)`

 `    at java.lang.Thread.sleep(Thread.java:340)`

`    at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)`

`    at com.aibaobei.user.controller.UserController.detail(UserController.java:18)`


`"http-nio-8080-exec-3"#30 daemon prio=5 os_prio=31 tid=0x00007fd08cb27000 nid=0x6203 waiting on condition [0x00007000032d8000]`

`   java.lang.Thread.State: TIMED_WAITING (sleeping)`

`    at java.lang.Thread.sleep(NativeMethod)`

`    at java.lang.Thread.sleep(Thread.java:340)`

 `    at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)`

`    at com.aibaobei.user.controller.UserController.detail(UserController.java:18)`


`"http-nio-8080-exec-4"#31 daemon prio=5 os_prio=31 tid=0x00007fd08d0fa000 nid=0x6403 waiting on condition [0x00007000033db000]`

`   java.lang.Thread.State: TIMED_WAITING (sleeping)`

 `    at java.lang.Thread.sleep(NativeMethod)`

`    at java.lang.Thread.sleep(Thread.java:340)`

`    at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)`

`at com.aibaobei.user.controller.UserController.detail(UserController.java:18)`

从上面的日志可以看出,这里有多个线程都阻塞在了UserController的第18行,说明这是一个阻塞点,也就是导致该接口比较缓慢的原因。

    • 扩展问题:频繁full gc的案例?相关案例3
      用本地缓存(公司基础架构组自己研发的框架)存放了商品数据。如果只存热点商品,内存占用不会太大,但是如果存放全量商品,内存就不够了。初期我们给每个缓存记录都加了7天的过期时间,这样就可以保证缓存中绝大部分都是热点商品。后来过期时间被去掉了。没有了过期时间,日积月累本地缓存越来越大,很多冷数据也被加载到了缓存。
  • 如何防止因为并发导致的库存超卖问题?不能借助任何第三方中间件,只有一个数据库和一个Java应用。答案参考 本博----Orderly Network面试

  • 一道笔试题

附: 本博-----达美乐的面试中有用jstack查看死锁的实例


  1. 博客园-----CPU飙高,频繁GC,怎么排查? ↩︎

  2. StackOverflow-----What does java “VM thread” do? ↩︎

  3. 稀土掘金-----jvm频繁full gc问题排查 ↩︎文章来源地址https://www.toymoban.com/news/detail-519347.html

到了这里,关于唯品会面试(部分)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 内核调优部分参数说明

    表示尽量使用内存,减少使用磁盘 swap 交换分区,内存速度明显高于磁盘一个数量级。 内存分配策略,Redis 持久化存储需设置值为1。 0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应

    2023年04月25日
    浏览(61)
  • 结合案例详细说明Spark的部分调优手段

    当谈到优化 Apache Spark 应用程序时,有一些更加详细和具体的优化策略和技术,可以帮助提高性能并最大化集群资源利用。以下是更详细的 Spark 调优方法: 资源配置与管理 : 内存调优 :合理设置 Executor 和 Driver 的内存分配,通过 spark.executor.memory 和 spark.driver.memory 参数调整

    2024年02月02日
    浏览(49)
  • 面试官:如何进行 JVM 调优(附真实案例)

    面试官:在工作中做过 JVM 调优吗?讲讲做过哪些 JVM 调优? 我一个QPS不到10的项目,上次问我缓存穿透缓存雪崩,这次问我 JVM 调优,我是真滴难。 不过大家别慌,热心的我给大家找来了几个满分回答,大家选择合适的使用。 回答1:听好了,下面将是我第一次 JVM 调优。 回

    2024年01月19日
    浏览(57)
  • 面试系列 - JVM内存模型和调优详解

    目录 一、JVM内存模型 1. 程序计数器(Program Counter Register): 2.Java虚拟机栈(Java Virtual Machine Stacks): 3. 本地方法栈(Native Method Stack): 5. 方法区(Method Area): 6. 运行时常量池(Runtime Constant Pool): 7. 直接内存(Direct Memory): 二、垃圾回收期CMS和G1区别 1. 工作原理:

    2024年02月10日
    浏览(48)
  • 面试八股文Mysql:(2)数据库调优

    数据库优化在提升系统性能是很重要的一个方面,不管是MySQL还是MongoDB还是其它的数据库。 SQL优化在提升系统性能中是成本最低 优化效果最明显的途径,可以让 吞吐量更大,响应速度更快 。如果你的团队在SQL优化这方面搞得很优秀,对你们整个大型系统可用性方面无疑是一

    2024年02月13日
    浏览(46)
  • JVM——StringTable面试案例+垃圾回收+性能调优+直接内存

    JVM——引言+JVM内存结构_北岭山脚鼠鼠的博客-CSDN博客 书接上回内存结构——方法区。 这里常量池是运行时常量池。 intern()方法  intern() 方法用于在运行时将字符串添加到内部的字符串池stringtable中,并返回字符串池stringtable中的引用。 返回值 当调用 intern() 方法时,如果字符

    2024年02月12日
    浏览(47)
  • JVM调优篇:探索Java性能优化的必备种子面试题

    首先面试官会询问你在进行JVM调优之前,是否了解JVM内存模型的基础知识。这是一个重要的入门问题。JVM内存模型主要包括程序计数器、堆、本地方法栈、Java栈和方法区(1.7之后更改为元空间,并直接使用系统内存)。 正常堆内存又分为年轻代和老年代。在Java虚拟机中,年

    2024年02月15日
    浏览(63)
  • 频繁FullGC的原因竟然是“开源代码”

    首先java语言的特性是不需像C和C++那样自己手动释放内存,因为java本身有垃圾回收机制(垃圾回收称为GC), 顾名思义就是释放垃圾占用的空间,防止内存泄露。JVM运行时占用内存最大的空间就是堆内存,另外栈区和方法区也会占用空间但是占用有限本章就不探究了。那么堆

    2024年02月16日
    浏览(31)
  • 3.Java面试题—JVM基础、内存管理、垃圾回收、JVM 调优

    一篇文章掌握整个JVM,JVM超详细解析!!! JVM (Java虚拟机) 是运行 Java 字节码 的 虚拟机 。 JVM 针对 不同系统 有 特定实现 ( Windows 、 Linux 等),目的是 同样的代码 在 不同平台 能运行出 相同的结果 。 Java 语言 要经过 编译 和 解释 两个步骤: 编译 :通过 编译器 将 代码 一

    2024年02月15日
    浏览(50)
  • 用jprofiler来分析 jvm 堆 内存泄露,fullgc

    jvm 命令和工具_个人渣记录仅为自己搜索用的博客-CSDN博客   方法1: 重新设置堆后,重启,复现.   方法2:  切割  官网文档 JProfiler Help - HPROF snapshots heap walker教学: 用jprofile查看hprof文件_hprof jprofile_java老张的博客-CSDN博客 通识教学: JVM监控及诊断工具GUI篇之JProfiler_每天都要进步一

    2024年02月08日
    浏览(99)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包