Shein面试一面+二面+三面+ get offer

版权声明:如笔记。一点一滴,伴我成长。可转载 https://blog.csdn.net/Butterfly_resting/article/details/89409273

在这里插入图片描述

一面准备

1.从项目设计到的问起
2.分布式事务实现方法
3.阻塞队列的实现
4.mybatis的用法
5.String,StringBuffer和StringBuilder的区别
6.dubbo的用法
1.HashMap底层
2.redis的数据结构
3.分布式的一个问题tomcat日志打印的线程模型
4.spring事务
重点:java知识,MySQL,常用框架(SSM)

本人一面面经

1)什么是组合?继承?依赖
2)修饰符的区别,public
3)基本数据类型和成员变量类型上的选择,基本数据类型的创建内存在哪
4)你了解设计模式吗工厂模式。讲下什么是工厂模式?他问怎么实现?
5)深拷贝和浅拷贝,区别?怎么实现?
6)关于项目的问题
7)get和Pos的区别
8)String,StringBuffer和StringBuilder的区别,String源码问题
9)String源码的一些问题,为什么String是不可变的,字符拼接“+”的实现,
10)ArrayList和LinkedList的区别
11)Map用过吗–HashMap和ConcurrentHashMap–》那说下hashMap初始化容量,讲下扩容机制。Hashmap怎么获取所有的key
12)HashMap和HashTable的区别。HashTable的初始容量扩容,扩容多少倍
13)hashSet的底层原理,提问如果添加对象要注意什么
14)抽象类和接口的区别
15)线程池有哪些,讲下特点,创建线程的方式
16)final修饰的类,方法,变量的区别
17)Spring:用过哪些标签?IOC原理,Spring事务了解吗,隔离级别
18)@Controller和@ReXXController
19)#和$的区别?Mybatis的常用标签用过哪些
20)运行时异常你遇见过哪些
21)Redis的线程模型,为什么Redis的操作是原子性的
时间原因,问了50多min,说剩下的不问了,问了能否过,可以

二面准备(源于网络)

一:
1)redis内部如何实现排序的
sort命令
sort命令可以对列表类型、集合类型和有序集合类型进行排序。 在score相同的情况下,redis使用字典排序(字典排序就是在首字母相同的情况下,比较第二个字母,以此类推)
2)rabbitmq是如何做到有序的接受消息的
队列
3)mysql索引的数据结构是什么? 树 innodb采用的是B+树
二:
架构师问:
1)框架相关的,JDK的原理,分布式的东西
三:
1)基础的集合 java集合由Collection接口和Map接口派生

2)SpringMVC原理
3)Servlet
4)数据库设计优化,以及结合项目场景分析

5)结合了自己的项目和一些实际的情况,做技术方案建设以及优化,建议等,比较考验技术栈

6)技术总监或项目负责人面试:结合了技术和HR的面试

四:
因为拿了其他公司的offer,所以这边很简单的问了下
hashMap相关,底层的数据结构,

五:
hashmap和hashtable的区别
mybatis,springmvc注解说5个
string的5个常用方法

求字符串长度、求字符串某一位置字符、提取字串、字符串比较、字符串连接、字符串中单个字符查找、字符串中字符的大小写转换、字符串中字符的替换、
问项目
问学习方式
问项目中遇到的问题怎么解决的
之前公司的主要业务

六:
项目
hashmap
内存结构/内存划分
gc

sql语句
了解中间件有什么

  1. 一般本地开发的话,小项目,或者是个人开发建议使用tomcat。
  2. linux系统建议使用jetty或apache hpptd
  3. 大型的项目就用JBOSS或webloigc
  4. 大项目或者商业项目一般采用:weblgoic/webshere,其他的还有jboss、glasshfish等
  5. 一些示例项目或者小项目常采用jetty
  6. tomcat , jboss, weblogic, websphere 一般项目tomcat就可以了
    项目
    内存结构
    多线程

    结合内存模型解释下Synchronized

synchronized 使得它作用范围内的代码对于不同线程是互斥的,并且线程在释放锁的时候会将共享变量的值刷新到主内存中。

Java 内存模型将内存分为共享内存和本地内存。共享内存又称为堆内存,指的就是线程之间共享的内存,包含所有的实例域、静态域和数组元素。每个线程都有一个私有的,只对自己可见的内存,称之为本地内存。

    共享内存中共享变量虽然由所有的线程共享,但是为了提高效率,线程并不直接使用这些变量,每个线程都会在自己的本地内存中存储一个共享内存的副本,使用这个副本参与运算。由于这个副本的参与,导致了线程之间对共享内存的读写存在可见性问题。


    为了方便线程之间的通信,java 提供了 volatile, synchronized, final 三个关键字供我们使用,下面我们来看看如何使用它们进行线程间通信。

synchonized又叫做对象锁,对象锁是指Java为临界区synchronized(Object)语句指定的对象进行加锁。无论访问用synchronized修饰的对象还是属性,当前对象都会被加锁。有时候面试官会问到访问synchronized static修饰的方法和属性有什么不同,如果多一个static会锁住了这个类的所有对象,是以类为单位的锁。

看过什么课外书
特长
学习能力
java天赋
家庭情况

七:
hashmap原理
concurrentHashMap原理
线程池的各种参数
各种锁的类型

  • 公平锁/非公平锁
  • 可重入锁
  • 独享锁/共享锁
  • 互斥锁/读写锁
  • 乐观锁/悲观锁
  • 分段锁
  • 偏向锁/轻量级锁/重量级锁
  • 自旋锁
    事务的类型

1、JDBC事务
2、JTA事务
3、容器事务管理
图论的算法
手写斐波那契数列递归非递归实现
八:
注重源码,数据结构,和设计模式

问项目比较多
十:
hashmap原理
JVM
多线程
并发
数据库
十一(应届生)
1.自我介绍
2.直接问多线程,线程的状态,以及线程状态转换涉及的方法,wait和sleep是否释放cpu资源

sleep让出CPU资源,sleep方法只让出了CPU,而并不会释放同步资源锁

3.线程池参数,使用过哪个拒绝策略,线程池是哪个类

  1. newCachedThreadPool
  2. newFixedThreadPool
  3. newScheduledThreadPool
    4.newSingleThreadExecutor
    5.WorkStealingPool
    6.ForkJoinPool
    Java中与线程池相关的类有下面一些:
  • Executor
  • ExecutorService
  • ScheduledExecutorService
  • ThreadPoolExecutor
  • ScheduledThreadPoolExecutor
  • Executors

4.连接池参数,连接池和线程池区别,用过哪些连接池

线程池是一个的“容器”,用于存放和管理线程的,concurrent.Executor接口的实现用于创建线程池
数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个
5.maven的作用优点,maven的生命周期

maven主要是用来解决导入java类依赖的jar,编译java项目主要问题
专门用于构建和管理Java相关项目的工具
1)Maven会自动将你要加入到项目中的jar包导入,不仅导入,而且还会将该jar包所依赖的jar包都自动导入进来。
2)借助Maven,可将jar包仅仅保存在“仓库”中,有需要该文件时,就引用该文件接口,不需要复制文件过来占用空间。
3)可借助Maven将一个项目拆分成多个工程,最好是一个模块对应一个工程,利于分工协作。

clean生命周期
Default生命周期
Site生命周期
6.mybatis常用的注解
7.四种引用(强软弱虚),分别如何实现(好像是这么问的,不太记得)
8.查看JVM堆和栈占用情况代码
jmap jstack
9.了解OOM么?如何让堆和栈溢出?
10.zookeeper原理
11.分布式和集群的区别
12.(在我强烈建议下才开始问数据库)数据库四个隔离级别
13.索引有哪些,哈希索引原理,索引越多越好?什么情况不建议建立索引

第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因 为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
第二,对于那 些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比 例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
第四,当修改性能远远大于检索性能时,不应该创建索 引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因 此,当修改性能远远大于检索性能时,不应该创建索引。

14.linux进程 内部 各种相关命令
ps -aux
15.jsp和servlet区别,生命周期
1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
联系: JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
16.java爬虫用到的包有哪些
17.navicat优点作用,navicat连接数据库是不是一定要本地安装mysql(这都问?)

本地不安装mysql 服务器是可以的。

但是至少要安装客户端。
18.消息队列知道的有哪些,ActiveMQ相关原理

设计表 springboot和springMVC多关注下

本人二面部门Leader面

1)自我介绍
2)讲下垃圾收集机制,讲了7min被打断,说你这方面技术很扎实了,我们下一个问题
3)if和switch的区别
4)如何保证线程安全。
5)开始聊人生,怎么了解我们公司
6)你的人生规划
7)为什么选择广州?等私人问题(总部在南京,有点想要我去南京的意思)
8)注:写的时候离面试有一段时间了,忘了部分,但与leader趣味相投,感觉回答的比较深入所以技术问的比较少。

三面CTO面准备

面前准备:
HR说: 应该不会问太过专业的技术知识
其他公司的CTO面试情况:
1.神策数据: 都没怎么问项目吧 都在尬聊 问个人经历
2. 一般不会问小的基础细节,可能是场景,设计题。
3. 面了两家cto,一家就是纯聊,一家是让我以一个leader的角度来设计安排一个项目,说的过程中他会提一些问题,或者指出一些缺陷
4.畅聊天下 - 派派两天后,CTO面(15min):
聊人生,什么语言用的比较熟练?毕业设计做的什么?为什么要做web网站?开始编程至今写过多少行代码,几万还是几十万?一亿个数据选取其中最大1000条?redis使用ping pong类型还是管线类型?最近看什么书?是打算在北京发展吗?
5. CTO面了,十几分钟,没聊技术方面的内容
6. 职业规划。
7. 问的都是项目,不问技术
8. 闲聊,偶尔有些技术问题

毕业设计做的什么?

课题是基于Scrapy的B站用户信息的获取与分析
爬虫的实现原理:
1.选取一部分专心挑选的种子URL;
2.将这些URL入队到待抓取URL队列;
3.从待抓取URL队列中让待抓取在URL出队,然后解析DNS,并且得到对应的主机ip,并将URL对应的网页下载下来,存储到已下载网页数据库中。除此之外,将这些URL入队到已抓取URL队列。
4.分析在已抓取URL队列中的URL,分析其中的其他的URL,并且将这些URL放入待抓取URL队列,从而进入下一个循环,以此类推。
一亿个数据选取其中最大1000条?

分治法
a、将100亿个数据分为1000个大分区,每个区1000万个数据
b、每个大分区再细分成100个小分区。总共就有1000100=10万个分区
c、计算每个小分区上最大的1000个数。
d、合并每个大分区细分出来的小分区,将这100个分区的1000
100个数合并,找出每个大分区的前1000个数。
e、合并大分区。

思路基本上是:必须分块处理,然后再合并起来。

Hash法。如果这1亿个书里面有很多重复的数,先通过Hash法,把这1亿个数字去重复,这样如果重复率很高的话,会减少很大的内存用量,从而缩小运算空间,然后通过分治法或最小堆法查找最大的1000个数。

第五种方法采用最小堆

本人三面CTO面

临时CTO太忙,找了个总监面试,自我介绍完, 问了点技术,说前两面分数高,就多谈点人生
1)项目有用到切面吗?…讲下
2)项目的有使用多线程吗?…讲下
3)熟悉Linux吗?如何查看开启了哪些服务?如何查看查看内存
4)好吧,相信你技术已经很扎实了。你怎么了解我们公司的?
5)深信服是个挺大的公司,你讲下你所在部门的业务,简单介绍下你的公司
6)你的人生规划
7)忘了,一些人生的问题,还是趣味相投…
8)get offer

总体,面试比较轻松,没有太多卡住的地方,很多东西不是光背面试题就能答好,有不少是自己平时在学校自学积累的。

猜你喜欢

转载自blog.csdn.net/Butterfly_resting/article/details/89409273