大家好,欢迎来到IT知识分享网。
提问环节
- 问自己没答出的最重要的一个问题(如果都答出来了,就不要问啦)
- 面试官您好:你能具体给我讲讲目前您所在的部门具体负责公司的哪块业务,以及技术栈吗?
- 面试的流程大概是什么样的?通长时间能收到2面或3面通知
- 如果有幸进入公司,是否可以去实习?
扩展新知识
- 机器学习了解吗?
- 监督学习和非监督学习有什么区别?
- 分布式集群有哪些了解?
- docker有什么了解?
- 微服务了解吗?
- 云计算有了解吗?
- 比如云计算有哪些服务和应用场景
- AWS 了解吗?
scala基础
- scala语言有什么特点? (是一个集面向对象编程和函数式编程为一体的语言,特点是速度快,能融入hadoop生态圈,像spark源码就是通过scala语言编写的)
- scala有哪些数据类型(byte,short,int,long,float,double,string,char,boolean,unit)
- scala 的object和class类有什么区别?(Scala中如果一个Class和一个Object同名,则称Class是Object的伴生类。Scala没有Java的Static修饰符,Object下的成员和方法都是静态的,类似于Java里面加了Static修饰符的成员和方法。Class和Object都可以定义自己的Apply()方法,类名()调用Object下的Apply()方法,变量名()调用Class下的Apply()方法。)
java基础
- int 占几个字节? 其他几个数值型的分别占几个?
- 说一下==和equals的区别?
- 为什么要重写equals和hashcode()方法
- 静态变量和静态方法,和实例变量和实例方法有什么区别?
- 为什么要用静态方法和静态类,有什么好处?(好处就是不需要创建对象,直接属于类对象,或类方法,速度快,节省内存资源)
- final 关键字
- final,finally,finalize()三者区别?(finalize()方法,是Object类中定义的方法,是在垃圾回收之前被JVM调用的方法,finally关键字,用于异常处理)
- 说说抽象类和接口?
- static的原理
- 为啥String这个类型是不可变的对象,原理是什么?
- java语言中 重写和重载有什么区别?
- 为什么面向对象中,多用组合,少用继承?
IO
- 那BIO 和非阻塞式IO有什么区别,它具体是怎么实现的?
java 集合
- 集合了解吧,说说集合有几大类,分别介绍一下?
- 集合中 arrayList 和LinkedList有什么区别?
- Set 了解过吗?知道 add() 会出什么问题吗?(这题就是判断你是否是背题,没看到源码的很难说出来)
- 说说hashMap 使用的是哪种数据结构
- hashmap的扩容机制
- 说一下什么叫哈希冲突
- 如何解决hash冲突(开放定址法,链地址法)
- hashMap线程安全吗?和它对应的hashTable呢? CurrentHashMap呢?
- 说一下hashmap的红黑树
- 红黑树为啥部分平衡。
- 红黑树怎么旋转?
- hashMap 是线程安全的吗?(不是,因为HashMap在put的时候,插入的元素超过了容量
(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,
在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的 - HashTable 和CurrentHashMap 的区别?
- 说说hashMap 和 ConcurrentHashMap 的区别
- 说一下hashmap,hashtable,currenthashmap的区别
- 经常在遍历一个map时,在删除时,经常会遇到并发错误,为什么?
- 说说hashMap在1.8之后优化的环节
- hashMap 为什么设置初始化为16(是因为 计算桶的位置时公式为h&(length-1),当为16时,16减一为15,二进制全为1111,和hashcode做与运算结果后所得的值全部在数组的范围之内。)
- 为什么扩容是2倍(为了保证扩容后的长度依旧为2的幂次方)
- hashMap源码 扩容是怎么实现的(通过resize,rehash)
- 说说ConcurrentHashMap的底层实现
- hashCode 怎么对应桶的位置?(hashcode值与数组长度-1进行位运算,得到桶的位置)
- concurrentHashMap有什么特点?
- 自己实现了一个对象,然后重载hashcode方法,这个时候还要不要重载其他方法?(需要重写hashcode 方法和equals方法)
- hash的实现机理是啥?他能带来哪些好处?
线程,多线程,线程池
- 线程的状态有几种?
- 等待有哪几种方式?
- sleep 和 wait方法的区别?
- 怎么启动一个线程?
- 创建一个线程有几种方式?
- 多线程里面,有什么机制可以保证线程安全?(通过锁机制,悲观锁,乐观锁等)
- 实现多线程同步有哪些方法?(通过synchronized,lock,volatile,Threadlocal等实现同步)
- 线程同步使用哪些锁?
- java实现多线程的方式有几种?
- 锁机制怎么使用的?
- 锁主要分为几大类?(公平锁/非公平锁/ 乐观锁/悲观锁/ 互斥锁/读写锁)
- 讲讲 synchronized,Lock,ReetrantLock之间的区别
- synchronized底层是怎么实现的? 和其它锁有什么区别?(synchronized底层属于JVM层面,在修饰代码块时通过两个指令monitorenter和monitorexit指令来实现,monitorenter指令指向初始位置,monitorexit指向结束位置,执行monitorenter线程试图获取锁,计数器从0到1,执行monitorexit指令时,锁计数器从1变为0,表明锁释放)
- synchronized用到静态方法和非静态方法有什么区别?(修饰静态方法,作用于当前类对象加锁,修饰非静态方法,作用于当前对象实例加锁)
- Lock锁讲讲, ReenTrandLock讲讲?
- java中实现悲观锁?(通过synchronized,reentranlock 实现)
- java中实现乐观锁?(通过CAS算法实现)
- 锁优化有哪些方式?(减少锁的持有时间,减小锁的粒度(concurrentHashMap),锁分离(LinkedBlockingQueue),锁粗化,锁消除)
- 锁消除通过什么参数可以控制?(逃逸分析和锁消除分别可以使用参数-XX:+DoEscapeAnalysis和-XX:+EliminateLocks(锁消除必须在-server模式下)开启)
- threadlocal了解吗? 讲讲这个(线程局部变量,每个线程都会备份ThreadLocal变量的副本,适用于变量在线程间隔离且在方法间共享的场景,内部设计中,threadlocalMap以threadlocal对象为键,任意对象为值,将这个结构附带在线程上,根据key来查询值。)
- threadLocal 怎么实现不同的线程之间相互隔离的?(每个线程对象都有一个ThreadLocal.ThreadLocalMap对象,ThreadLocalMap对象里面是一个Entry数组,每一个Entry对象存储一个TheadLocal和一个value,key就是ThreadLocal对象,value就是我们设置的值,这样就做到了线程之间的数据隔离的目的)
- 说说volatile关键字
- voletile如何保证线程安全?(因为它可以保证变量在多个线程之间的可见性,当一个线程对变量进行修改后,会将该变量从工作内存复制到主内存,其他线程就可以看到修改的值。)
- 那使用voletile 有什么缺点?(1.只能保证变量的可见性,不能保证原子性,2.频繁更改、改变或写入volatile字段 有可能导致性能为题)
- 可重入锁底层/AQS底层
- LRU底层实现(最近最少使用算法,算法的内部维护了一个LinkHashMap的数组加双向链表,通过put数据的时候判断是否内存已经满了,如果满了,则将最近最少使用的数据给剔除掉,从而达到内存不会爆满的状态)
- 什么是java中的原子操作?(所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch)
- 说说分布式锁?(解决进程之间资源共享时读写的问题,分布式锁必须满足三大要求:排他性,避免死锁,高可用)
- 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用join操作
- 了解java线程池吗?
- 线程池有哪些核心参数(corepoolsize,maximumPoolSize,keepAliveTime,unit,workQueue)
- 为什么要引入线程池?
- JDK里面 线程池的定义,
- 线程池保持线程存活时间的具体参数关键词(keepaliveTime)
- 任务队列满了以后再来一个任务如何处理(执行拒绝策略)
- Spingboot部署的时候内部用的哪个线程池?多线程过程中用过哪些锁?(使用ThreadPoolTaskExecutor)
- 常用的线程池有几种?
- 创建一个定时任务的线程池用哪个(newScheduledThreadPool)
- 定时的线程池有几种?(两种:单线程的定时器线程池newSingleThreadScheduledExecutor和固定数量的定时器线程池newScheduledThreadPool)
- 线程池在提交任务和执行任务时是怎么做的?
- 线程池提交任务和执行任务的区别?(execute(Runnable x) 没有返回值——实现Runnable接口,submit(Runnable x) 返回一个future。可以用这个future来判断任务是否成功完成。——实现Callable接口)
- 创建线程池,当里面的线程数量达到最大时,会出现什么问题?
- 线程池使用过吧,说说线程池中有哪些关键字 具体使用方法。
- 有一个场景,现在一张表有几十万的数据,然后10个线程,对它并发计算,然后计算完了之后通知,该怎么设计?(每个线程处理每个线程的事情,然后做个通知)
JVM问题
- 说说JVM内存区域分为几大块,分别讲一下
- 哪些是线程私有,哪些是线程共有
- 哪个不会发生内存溢出?(程序计数器)
- 方法区什么时候会产生内存溢出?(一直执行类加载)
- 项目中有没有用哪些工具看过进程中有哪些线程,JVM内存的情况。(jstack:打印线程的栈信息,制作线程dump文件,jmap:打印内存映射,制作堆dump文件,jstat:性能监控工具,jhat:内存分析工具)
- 堆里面主要干什么?
- 虚拟机的堆内存分为哪几个区?
- 基本数据类型(比如int i)在内存中是怎么存的(栈中保存)
- ArrayList的属性length存在内存的什么地方?(new 一个ArrayList对象,所以都在堆中存储)
- java虚拟机里面的垃圾回收算法有哪些?
- 类加载存在内存中的哪一块?(方法区)
- 复制算法为什么需要2个Survivor空间, 1个不行吗
- 不同的区使用的算法都是一样的吗?
- 初生代用哪些算法,老生代用哪些算法
- JVM垃圾回收一般什么时候出发minor GC
- 那并发量很高时,使用哪种算法?(复制算法)
- 项目中开发你的垃圾回收算法用的哪一种?
- 如何判断出哪些垃圾该清理,哪些不该清理?
- 类加载过程(加载-验证-准备-解析-初始化)
- new对象的过程
- new一个对象时是如何知道给它分配多大的空间?(JDK64位,创建一个对象占24字节,32位 占12字节)
- 简单介绍一下java的生命周期有哪些阶段吗?(加载-验证-准备-解析-初始化-运行-卸载)(1加载 java类被javac编译成.class文件,然后jvm通过类加载器将二进制的class文件加载到内存中,将其中的静态存储结构转为方法区的运行时数据结构,然后在堆中生成一个对象,作为访问这个类的入口。2 验证 字节流,字节码是否符合Class文件格式规范和语言规范等。3准备 为static修饰的变量分配内存并设置初始值。4解析 将常量池中的符号引用替换为直接引用 5 初始化 给类变量赋值和执行其它资源,6使用 对象的初始化、调用init方法,操作 7卸载 对对堆内存中的对象进行回收。
反射字节流Class文件格式规范
- 了解反射吗? 说说反射?
后端框架 (Spring、SpringBoot、mybatis、SpringMVC)
- 介绍一下Spring及Springboot.的区别?
- 简单介绍一下项目中引用Springboot是解决了什么问题,有什么优点?
- Springboot是如何简化哪些配置,具体是怎么实现的?(和SpringbootApplication 注解相结合,在main中通过调用run方法来加载 监控任务执行时间,创建应用上下文,程序运行参数等相关配置)
- springboot应该要接收前端ajax请求时,应该使用什么注解(@RequestMapping(“/login”) 和@ResponseBody)
- springboot中configuration的注解有什么用?(用于定义配置类,可替换xml配置文件,例如用@Configuration加载spring,用@Configuration配置spring并启动spring容器)
- 任务调度有用过吗?(使用springBoot如何快速创建一个定时任务(用一些组件)使用@EnableScheduling注解,在main方法类中添加 @EnableScheduling注解,然后单独创建一个类,用来存放定时任务,然后在每个定时任务方法上,用注解标明定时任务的执行周期@Scheduled(fixedRate = 10000))
- Springboot 返回json字符串的话 使用哪个注解?(RestController)
- 底层如何实现调度的?
- 用过Spring吗?
- Spring中的事务具体怎么做的? 事务的传播性。(5种 1 required 业务逻辑没有事务,自动创建事务 2 support 没有配置事务,代码以非事务方式运行,3 mandatory 没有事务抛出异常 4 required_new 没有事务,自动创建事务,由事务,把你的挂起不用,5 not_supported 总是以非事务方式运行)
- Spring主要的特点(提AOP和IOC),有啥好处?
- Spring IOC、AOP底层实现
- Spring IOC如何解决循环依赖的问题?
- 介绍一下Spring AOP、AOP的实现机制
- Spring AOP用的哪些设计模式?
- JDK代理和CGlib代理有啥区别?
- mybatis 如何使用的?(通过xml 和注解式两种方式 对于小系统而言,使用注解式快速,简单,缺点是SQL有变化时都需要重新编译代码)
- 没有mybatis,如何写dao层?
- jdbc的使用流程?(1 注册数据库驱动 2 建立数据库连接 3 创建一个Statement对象,4 执行sql语句,5 处理结果集,6 关闭数据库连接)
- 说一下没有mybatis时,通过JDBC具体如何实现这个过程的?
- mybatis 如何获取自增ID(通过xml映射器和接口映射器实现 在xml中设置useGeneratedkey为true,并分别指定属性keyProperty =”id”,keyColumn=”id” 在接口映射中使用@options(useGeneratedkey=true,keyProperty =”id”,keyColumn=”id” ))
- mybatis怎么解决sql注入问题(提到#{}和${})
- mybatis的一二级缓存(一级缓存SqlSession,默认情况下开启一级缓存,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,MyBatis会将其放在缓存中,以后再查询的时候,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。二级缓存是Application级别的缓存,在XML文件配置开启缓存,然后MyBatis要求返回的java对象必须是可序列化的。 也就是要求实现Serializable接口)
- mybatis 如何实现批量插入(在xml中使用foreach循环插入,),
批量删除( #{item} ),
批量更新(foreach实现循环插入)等的语句 ) - mybatis和hibernate框架有什么区别?
- 使用mybatis有没有用到orm对象?
- springMVC处理流程
- springMVC的好处在哪里(答代码解耦,面试官答:便于多人协作开发)
数据库
- 说说内连接和外连接的区别
- 数据库设计时会碰到一对多,多对多时,应该怎么设计
- 就以用户表和角色表为例,假如用户表里面放着角色表的id作为 角色表的外键,那一个用户对应多个角色时,
- 说说mysql的存储引擎有哪些? 有什么区别? 应用到什么场景?
- 谈谈数据库的事务(ACID特性,原子性,一致性,隔离性,持久性)
- 数据库事务有几种?(数据库隔离级别)
- 事务的传播机制?(5种)
- 事务嵌套开启一个事务,用那种传播机制?(required) 继承上一个事务使用啥?(使用support)
- 读未提交与读已提交的区别?(读取已提交可以避免脏读,读未提交不能避免脏读。脏读:事务A对数据进行了修改,即使没有提交,对事务B来说也是可见的,这就是脏读)
- mysql事务如何保证持久性(MySQL是通过WAL方式,来保证数据库事务的一致性和持久性,WAL预写日志方式(Write-Ahead Logging)是一种实现事务日志的标准方法,具体而言就是:事务开始时,先记录事务的日志序列号,日志执行时,一定要先在InnoDB存储引擎的日志缓冲里写事务日志;事务提交时,一定要保证事务日志先写入磁盘,即innodb_flush_log_at_trx_commit=1,才能算事务提交完成。)
- redo log 和undo log 有什么区别?(redo log 为重做日志 /undo log 撤消日志。 redo log:就是每当操作一个事务时,都必须先记录一个日志序列号,然后重写日志,最后将日志写入磁盘。undo log:当一些更改在执行一半时,发生意外,而无法完成,则可以根据撤消日志恢复到更改之前的壮态。rodo 存放在重做日志文件中,undo 存放在数据库内部的一个segment段中。称为undo段,位于共享表空间中。 )
- 通过什么工具可以查看undo的数量( 通过py_innodb_page_info.py工具,来查看当前共享表空间中undo的数量。)
- 你知道分布式事务吗?什么是两段式,三段式,你用过吗?
- 简单谈一下数据库中的悲观锁和乐观锁怎么理解的?(悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。)
- 数据库中如何实现乐观锁?(通过版本号version 和行锁)
- 数据库中如何实现悲观锁?(通过加排它锁实现 例如 select * from A where id=1 for update)
- mysql的索引有哪些?(mysql索引的几种类型:1 主键索引
:
主键是一种唯一性索引,但它必须指定为PRIMARY KEY
,每个表只能有一个主键。2 唯一索引:唯一索引列的所有值都只能出现一次,即必须唯一,值可以为空。3 普通索引:基本的索引类型,值可以为空,没有唯一性的限制。4 全文索引:索引类型为fulltext。全文索引可以在varchar、char、text
类型的列上创建。可以通过ALTER TABLE
或CREATE INDEX命令创建。5 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并) - 索引类型按存储结构划分(hash索引,b+tree索引)
- hash索引的使用场景是啥?(只能用于”=”的过滤,不能用于范围查询,不能避免全表扫描,不能利用部分索引键查询)
- B+树索引的核心在于什么?(节点作为key,具体信息在叶子节点存储)
- Mysql hash索引 和b+tree索引 什么情况使用
- 我们知道树有很多种,为什么要选择b+树,而不选择其他?( B+树的磁盘读写代价更低:B+树的内部节点并没有指向关键字具体信息的指针,B+树的节点只存储索引key值,具体信息的地址存在于叶子节点的地址中。这就使以页为单位的索引中可以存放更多的节点。减少更多的I/O支出。 )
- 数据库索引有很多种,哪一种索引对应的是b+树实现的?(主键索引,组合索引)
- 数据库索引为什么要用b+树,不用b-树?(虽然b+树和b-树都可以减少磁盘I/O次数,但是B-树的每个节点都有data域(指针),这无疑增大了节点大小,磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多,而B+树除了叶子节点其它节点并不存储数据,节点小,磁盘IO次数就少。)
- 数据库索引为什么要用b+树,不用红黑树?(AVL 树(平衡二叉树)和红黑树(二叉查找树)基本都是存储在内存中才会使用的数据结构。在大规模数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁,进而导致效率低下的情况)
- 说一下数据库有哪些索引类型,有什么优缺点?(主键索引)
- 如果使用like查询,会不会走索引?(一部分会走,一部分不会走,只有不以%开头的时候,才会使用到索引,例如’前%’ 走索引,’%前%’ 不走索引,’%前’ 不走索引)
- 有没有使用 explain字段去分析sql语句,它有哪些字段(使用explain分析时,重点关注几个字段:
type:这是一个非常重要的参数,连接类型,常见的有:all (全表扫描), index(全索引文件) , range(只检索给定范围的行) , ref (非唯一索引扫描,即返回所有匹配某个单独值的行), eq_ref (唯一性索引扫描,对于每个索引键,表中有一条记录与之匹配), const(表示通过索引一次就可以找到) , system(表只有一条记录) , null 八个级别。
key: 显示查询语句实际使用的索引。若为null,则表示没有使用索引
rows :根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数,值越大越不好) - 索引的左对齐原则/最左原则
- 数据库优化方面(比如数据库慢查询)、一个场景,现在数据库执行过长,如何对它进行优化?
- 数据库设计遇到什么问题?
- 算法题
student(sid,sname,sex,class)course(cid,cname,teacher)
grade(cid,sid,score)
1,sex 改为age,非空,默认值为0
2 统计035号课程分数大于036号课程分数的学生ID
3 统计所有003班学生各门功课的课程名称和平均分
redis内存数据库
- 项目中使用了redis,如何操作的,为什么要使用redis?
- 怎么解决双写一致性?(先淘汰缓存,在更新数据库,然后将数据库的数据更新到缓存中)
- redis的并发是多大?
- 介绍一下redis数据结构(1 String->字符串 2 Hash->元素组成的字典,用于存储对象。3List 按照string元素插入顺序排序,先进后出,可以用于实现消息队列。4 set-> string元素组成的无序集合,通过hash表实现,不允许重发。5 有序集合,通过分数来为集合中的成员进行从小到大的排序。)
- set 和sorted set 有什么区别?
- redis是通过什么方式进行持久化的?(RDB和AOF)
- redis有哪几种淘汰策略?(6种淘汰策略
volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放。
volatile-random:随机选择一个数据进行释放
volatile-ttl:选择马上就要过期的数据进行释放操作
allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放
allkeys-random:随机选择一个数据进行入释放
noeviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误。) - redis缓存穿透,缓存击穿,缓存雪崩,以及如何解决?
- redis实现生产者消费者模型(使用list数据结构 lpush 放数据,rpop拉数据)
- redis实现生产一次,消费多次
- 实现对象的底层数据结构
- 说说SDS和它的优点?(SDS(simple dynamic string):简单动态字符串,内部定义三个属性,len(保存了SDS保存字符串的长度), free(记录了 buf 数组中未使用的字节数量), buf[](数组用来保存字符串的每个元素) 优点: 1 常数复杂度获取字符串长度o(1), 2 杜绝缓冲区溢出,3 减少修改字符串的内存重新分配次数)
- 跳表的实现与复杂度(跳表:是一种有序数据结构,它通过在每个节点中维持多个指向其它节点的指针,从而达到快速访问节点的目的。)
- 有序集合的底层 -字典与跳跃表 为什么用这两个结构
- 分布式锁有没有使用过?(使用setnx()方法,expair()方法)
- Redis为什么快(1 纯内存操作,2单线程,避免频繁的上下文切换,3 采用非阻塞I/O多路复用机制)
- RDB AOF优缺点,怎么选择
- 如果redis中有1亿个key,其中有10万个key是已知的固定前缀的key开头的,如何将他们全部找出来?(使用scan命令 scan cursor match pattern count count 例如: scan 0 match k1* count 100 )
- 为什么不用keys命令?(会使内存卡顿,服务器消耗过大)
- Redis 源码读过吗?
设计模式
- 设计模式分为几大类?(三类:创建型模式,结构型模式,行为型模式)
- 讲讲单例模式有哪几种?什么场合下用哪一种 ?(饿汉,懒汉,懒汉线程安全,双重加锁)
- 单例模式的缺点和特点(缺点:没有接口,可扩展性不强)
- 写一下单例模式,在多线程情况下呢?
- 单例模式中对象什么时候初始化(分两种情况,饿汉和懒汉,初始化的时间不一样)
- 讲一下代理模式?动态代理分几种?运用场景。
- 说说工厂模式有哪些?简单工厂有什么缺点?其他的呢? 使用场景
- 你讲一下什么是装饰者模式?应用到哪些场景?(动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。)
- 说一下策略模式,应用到哪些场景?(针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。)
- 说说适配器模式、装饰模式、外观模式,以及运用场景?
- 说说观察者模式和迭代器模式,以及运用场景?
- 单例模式和原型模式适用场景,什么时候用单例模式,什么时候用原型模式。
网络编程
- 四层模型是哪四层,7层模型是哪7层? 五层是哪五层?区别在哪?
- 网络分层结构,大概每层的主要工作是什么
- 链路层要解决什么问题?
- 数据链路层的网络地址用什么表示?
- 三次握手和四次挥手?
- 四次挥手,断开连接的时候,经常会出现time_wait的状态,这个状态是怎么产生的?
- TCP是在IP的上层还是下层? 上层
- TCP和UDP有什么区别,应用场景。
- UDP典型的应用?
- HTTP属于哪一层协议 ?
- Http 报文里有什么?
- HTTP底层是基于哪一层协议的?
- 应用层常见协议。
- http请求头包含哪些字段。
- HTTP和 HTTPS的区别?
- 说说对HTTP的协议有什么了解?
- HTTPS的安全体现在哪个方面?
- 说说HTTPS协议关于CA证书这方面的了解
- HTTPS传输时涉及到一些加密算法,有哪些了解,以及算法的应用场景 比如RSA
- 对称加密算法和非对称加密算法的概念
- HTTP协议的method有几种
- get和post的区别
- web编程了解多少?
- 在前端提交请求时,cookie中经常有个jsessionid的cookie值,这个cookie值是用来干嘛的?
- 服务器一般保存了一个session,浏览器为什么知道我多次请求在一个session里面,为什么能找到我之前的session
- session机制
- RPC进程通信方式有哪些方式(答pipeLine,信号量)
- 网络层的主要功能(答路由),运输层TCP的主要核心(答可靠传输)
- 数据链路层最核心参数
- http协议返回状态码
- Https有哪些改进。
- 在网页上输入一个URL,说说它所经历的过程(DNS寻址,TCP连接,Http请求,http响应,页面渲染)
- 如果网络距离太长,怎么解决?(接31题)
- 搭一个通信框架(使用tcp) 用socket编程搭,客户端、服务端等。
- NIO了解过吗? 怎么做的优化? 分为几个阶段?每个阶段是做什么的?
- RPC了解吗?常用的RPC框架有哪些?(基于二进制协议的)如(dubbo)
- 很多服务器,那请求落到哪台服务器上,是通过什么策略?(通过nginx的ip_hash策略)
数据结构与算法
- 介绍一下有哪些常见的算法,并且哪些是稳定的,哪些不稳定,以及时间复杂度
- 快速排序的原理及实现
- 说说二分查找?以及里面注意的关键点
- 归并算法的实现原理?
- 等比数列如何求递推公式?
- 递归算法如何查询
- 斐波那锲数列了解么?(了解)。
- 斐波那契数列,不使用递归的方式实现
- 什么是递归?
- 使用递归 有什么优点和缺点?
- 动态规划相比递归来说有什么优点。
- 说说树的遍历有深度遍历(DFS)和广度遍历,一般怎么实现 (深度遍历就是先序遍历 先序遍历采用递归,非递归需要用到栈,利用栈的先进后出特性)(广度遍历就是层次遍历,应该使用非递归,需要用到队列,先将根入队,队列不空时pop,然后入左子树,再入右子树)
- 图有什么分类,图论的分配法?
- 图的算法你清楚吗?最短路径问题,最少成本问题?
- 说说平衡二叉树的特点
- 设计一个栈,包含出栈,入栈,是否为空等
- 求两个大数相加,每个数100位长度。
- 实现一个链表反转,设置一个步长,每隔几次,链表进行反转
- 设计一个hashMap,实现一个put方法。
- 将一个组数循环右移,根据K来
- 说一下图的表示方法
- 算法题,判断镜像二叉树。(用递归写得)时间复杂度,空间复杂度。
- 一个整数型数组,判断是否存在一个数,这个数前边的数比小,后边的比它大,返回这个数的下标(使用标记数组做)
- 拆分子数组 leetcode 410 给定一个由非负整数和整数m组成的数组,可以将数组拆分为m个非空连续子数组。编写算法以最小化这些m个子阵列中的最大总和。
- 10 如何在4亿个数字中去重
- 排序一个字符串 时间要求O(n)
- 奇数上升偶数下降的链表排序 空间要求O(1)
- 给一个有重复数字的数组,求集合{(a,b,c) | a+b+c=0}
操作系统
- 操作系统,问操作系统有几大模块(处理器管理,存储器管理,设备管理,文件管理,作业管理)
- 什么是死锁?死锁产生有哪些条件?(互斥条件,请求与保持条件,循环等待条件,不可剥夺条件)
- 进程间通信有哪些方式?(管道,信号量,信号,消息队列,共享内存,socket等方式)
- tcp协议有哪些计时器?它分别是做什么的?(四种:重传计时器,坚持计时器,保活计时器,时间等待计时器(2MSL=最长报文生存时间))
- 操作系统之间有用户态和内核态,他们之间有什么区别?
- 用户态切换到内核态有几种方式(3种:1系统调用 2异常,3外围设备的中断)
- 为什么需要内核态?什么时候进入内核态?
- 内核态和用户态的切换
- 查看CPU使用率的命令
- select poll epoll三连
- 虚拟内存的作用
- CPU二级缓存
- Linux 下内存分配原理?
- new, malloc区别,new的实现,虚拟内存
- java零拷贝
linux
- 如何查看linux 内存占用情况 (top)
- 如果响应时间过长或者CPU占用过高, 如何排查, 用哪些工具或命令( 1 先用top命令,找到cpu占用最高的进程 PID 2 再用ps -mp pid -o THREAD,tid,time 查询pid进程中,那个线程的cpu占用率高 记住tid 3 将tid 转换为16进制 printf “%x\n” tid 4 打印线程的堆栈信息 jstack pid |grep tid -A 30 然后分析代码中是否出现死循环或者在循环中不停创建对象)
大数据知识点
- 说说Hadoop?
- 是否自己搭建的hadoop集群, 集群节点数及配置(是的,5个节点,2主,3从)
- 那你说说搭建hadoop集群的3个xml文件(core-site.xml,hdfs-site.xml,mapred-site.xml )
- 改过三个xml中的哪些参数, 分别代表什么含义?(1 core-site.xml 中 配置主节点端口号 fs.defaultFS :hdfs://mini1:9000 以及hadoop.tmp.dir的路径 2 hdfs-site.xml 的副本 配置3个,NameNode web管理端口 50070 3 mapred-site.xml 配置使用yarn进行运算 )
- 正常的hadoop集群工作都会启动哪些进程?(NameNode,DataNode,SecondaryNameNode )
- 他们的作用分别是什么?
- 详细介绍一下secondaryNode 的具体作用吗
- HDFS的块默认是保存几份?一个块多大?(3份,128M)
- 之前的64M 是从哪个版本变换的?
- 那假设现在是128M,那我在工作中想把它调为256M,那我需要调整什么,才能改变块的大小?
- 说说Hdfs的读写过程
- 写操作中如何判断客户端向哪一台datanode中上传第一个block块。(通过就近原则)
- 那客户端是怎么通过距离来判断哪台datanode 离他近或者离他远(看客户端到达datanode
之间的网络跳转的次数来判断,如果在同一个路由器下面,那距离都一样,直连,只需要跳转一次) - 第二次上传block块根据什么原则?(就远原则,保证安全性,防止全部上传到一个机架上,如果机器坏了,数据就会丢失等。)
- 说一下MapReduce的工作原理?
- MapReduce 设计时为什么要设计成 map,reduce的操作,它解决了什么问题。
- 你在具体讲一下map中的一些步骤,例如partition,sort,combiner,shuffle等等
- MapReduce中容易发生数据倾斜,是怎么产生的,如何处理?
- 这个数据倾斜一般是在Mapper端发生的还是Reduce中发生的?
- 发生数据倾斜是因为这个key分布不均匀,那你会怎么优化呢?(可以在Mapper期间将大数据量相同的key进行分散,通过添加N以内的随机数前缀,对数据较多的Key进行子扩展,先进行局部操作,再去除随机数之后进行聚合操作,避免在进行Shuffle操作时出现数据倾斜问题。)
- 那Mapper端进行combiner之后,除了速度会提升,那从Mapper端到Reduece端的数据量会怎么变?
- map 输出的数据如果超出他的那个小文件内存之后,那他是落地到磁盘还是落地到HDFS中?
- Map到Reduce默认的分区机制是什么?
- hadoop的调优主要针对配置文件的调优你知道哪几种?
- 现在有1G的数据文件,里面有四个字段,分别是id,name,age,class,然后要按照class来分组,id来排序,口述一下mapreduce的过程是怎么实现的?这里面会有几个map?
- 说说yarn吧,它有什么优势,能解决什么问题?(因为hadoop1.0不能满足多系统集成,所以产生yarn,yarn是一个集群资源管理与任务调度的分布式框架,由resourceManager,NodeManager组成,resourceManager负责系统的资源管理和分配,NodeManager负责yarn集群中的每个节点)
- 谈谈yarn(YARN是Hadoop2.0版本引进的资源管理系统,直接从MR1演化而来。 核心思想:将MR1中的JobTracker的资源管理和作业调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现。ResourceManager:负责整个集群的资源管理和调度 ApplicationMaster:负责应用程序相关事务,比如任务调度、任务监控和容错等。 YARN的出现,使得多个计算框架可以运行在同一个集群之中。 1. 每一个应用程序对应一个ApplicationMaster。 2. 目前可以支持多种计算框架运行在YARN上面,比如MapReduce、storm、Spark、Flink。)
- yarn的调度算法有哪些?(FIFO Scheduler ,Capacity Scheduler,FairScheduler 三种)
- 谈谈zookeeper(ZooKeeper 是一个开源的分布式协调服务,是 Google Chubby 的开源实现。分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。我们公司使用的flume集群,Kafka集群等等,都离不开ZooKeeper呀。每个节点上我们都要搭建ZooKeeper服务。首先我们要在每台pc上配置zookeeper环境变量,在cd到zookeeper下的conf文件夹下在zoo_simjle.cfg文件中添加datadir路径,再到zookeeper下新建data文件夹,创建myid,在文件里添加上server的ip地址。在启动zkserver.sh start便ok了)
- Hive了解吗?
- Hive的元数据,都有哪些?(hive的元数据存在于mysql中,在mysql中会有一个hive库,存放相应的表,一共53张表,例如:1、version表,version表存hive的版本信息,该表中数据只有一条。2 dbs表: 包含 DB_ID:数据库ID,DESC:数据库描述,DB_LOCATION_URI:数据HDFS路径,NAME:数据库名等。3 tbls表 等)
- 你知道UDF吗?(UDF就是Hive提供的内置函数无法满足业务处理需要时,可以考虑使用用户自定义函数。)
- hive如何实现UDF的详细过程(客户端继承UDF类,然后打包 )
- 说说内部表和外部表的区别?
- 大表和小表如何进行查询?
- 一张大表,一张小表,你写join in时,哪个表放左边,哪个表放右边?
- Hive数据倾斜怎么产生的? 怎么处理?
- Hive的sql解析了解吗?
- 说说Spark吧,Spark为啥比Mapreduce运行块,原因都有哪些?
- Spark 介绍一下 分为哪些组件?
- 什么是RDD?(弹性分布式数据集,分两种操作:转换操作和执行操作)
- RDD的缓存级别(MEMORY_ONLY 将 RDD 以反序列化的 Java 对象的形式存储在 JVM 中. 如果内存空间不够,部分数据分区将不会被缓存,在每次需要用到这些数据时重新进行计算. 这是默认的级别。 MEMORY_AND_DISK 将 RDD 以反序列化的 Java 对象的形式存储在 JVM 中。如果内存空间不够,将未缓存的数据分区存储到磁盘,在需要使用这些分区时从磁盘读取 。MEMORY_ONLY_SER :将 RDD 以序列化的 Java 对象的形式进行存储,如果内存空间不够,部分数据分区将不会被缓存,在每次需要用到这些数据时重新进行计算。MEMORY_AND_DISK_SER 将 RDD 以序列化的 Java 对象的形式进行存储,如果内存空间不够 ,将未缓存的数据分区存储到磁盘,在需要使用这些分区时从磁盘读取。)
- 你都知道哪些RDD算子?
- 你知道reduceBykey 和groupBykey有啥区别吗?
- Spark 数据倾斜怎么产生,如何处理?
- 宽窄依赖具体讲讲
- 宽依赖是不是要进行shuffle(对)
- shuffle操作有几种方式
- Spark任务产生小文件太多,该怎么处理?(合并小文件的方式有几种)(例如sql,函数,distrubutedBy)
- 你说说的广播变量?
- Spark的累加器知道吗?
- 你说说spark中 job,stage,task,分别代表什么?
- 说说Spark的工作机制?
- spark任务的执行流程
- Spark如何进行分桶
- Spark任务调度有几种方式?(任务是怎么分配给executor)(调度算法)
- Spark任务分配方式有几种方式?
- Spark Sql 和Hive 的区别?
- Spark sql解析有哪几个步骤? 具体如何操作的(spark内核的sql解析)
(把sql如何拆成多个job) - SparkStreaming 和MapReduce比较,提升的性能在哪?
- SparkStreaming 的实时体现在哪?
- 了解zookeeper吗?
- 说说zookeeper的选举过程
- Hbase的表结构是什么样的?
Kafka
- 说说你所了解的kafka
- kafka的设计原理
- 发布订阅的消息系统那么多,为啥选择kafka?(kafka可以无缝的支持多个生产者,多个消费者,3 基于磁盘的数据存储 4 伸缩性很强,可以先使用单个broker,到后面可以扩展到多个broker 5 高性能。)
- kafka如何保证对应类型的消息被写到相同的分区?(通过消息键和分区器来实现,分区器为键生成一个一致性散列值,然后使用散列值对主题分区进行取模,为消息选取分区,这样就可以保证包含同一个键的消息会被写到同一个分区上。)
- 消费者如何确定哪些消息读过,哪些没读过?(通过检查消息的偏移量offset来区分已经读过的消息。)
- kafka中broker的作用是啥?(一台kafka服务器就被称为broker,broker用来接收生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求作出响应。返回已经提交到磁盘上的消息。)
- 服务端从kafka中去拉数据,服务端的空间永远是有限的,拉完怎么判断所有人都拉完了?
- 说说kafka的默认消息保留策略?(broker默认的消息保留策略分为两种:1 保留7天,2 到达一定的字节数1GB)
- kafka如何实现集群间的消息复制?(kafka提供了一个叫做MirrorMaker的核心组件,该组件包含一个生产者和一个消费者,两者之间通过一个队列进行相连,当消费者从一个集群读取消息,生产者把消息发送到另一个集群。 )
- kafka和zookeeper之间的关系(kafka使用zookeeper来保存集群的元数据信息和消费者信息(偏移量),没有zookeeper,kafka 是工作不起来)
- kafka是怎么进行数据备份的?
- 消费者是从leader中拿数据,还是从follow中拿数据?
- kafka的ISR机制?
- kafka如何保证数据的不重复和不丢失?
- kafka里面存的数据格式都是什么样的?
- kafka中存的是一个数据文件,还是索引文件?
- kafka 是如何清理过期数据的?
- 一条message中包含哪些信息?
- kafka如何实现消息是有序的?
- kafka如何实现多线程的消费?
- kafka的消费者组跟分区之间有什么关系?
- kafka有5个消费者,4个分区,是如何消费?
- kafka的分区有哪些方式,分区算法?
项目问题
1 智慧咸阳大数据分析平台
- 介绍一下项目
- 用了哪些技术,画一下架构图
- 集群是怎么部署的?
- 分析使用什么进行分析的?
- 你在其中负责哪些模块及功能
- 系统产生日志文件,一天产生多少条?
- 你那些原始日志是从哪块采集过来的?
- flume采集子系统日志,这些日志数据都包含哪些?
- 分割数据使用什么进行分割?
- 输入的类型和输出的类型分别是什么?
- 数据清洗之后是落到哪里,存储到哪里?数据量大吗?
- 表中的key是什么,value是什么?
- 从业务上说一下怎么对日志文件进行分区的,怎么保存的?
- hadoop的数据包是基于什么协议的。
- 集群维护遇见了哪些问题,怎么解决的。
- 场景题:如何过滤出评论中的敏感词(1、通过和b+树类似的字典树(DFA算法)来实现字典树的每个节点保存每个字符,
那他所形成的路径就代表一条一条的字符串,进行查询时,如果匹配到敏感词的字符串,那就过滤出去 2、通过正则表达式) - 我看你用到kafka,kafka主要解决什么问题呢?
2 重大项目管理平台
- 项目介绍
- 用了哪些技术,画一下架构图(后端springboot+ssm+shiro+redis 前端页面 html+css+layui+jquery+ajax+echars )
- 负责哪些模块,及功能
- 开发周期多长?
- 技术亮点和难点(四大亮点和难点 1 排行榜公布,2 导入导出功能,3 数据库设计,4 平台考核算法)
- 排行榜介绍
- 导入导出介绍
- 还有其他什么方式可以实现导出功能?
- 数据库怎么设计的?
- 平台考核机制介绍
- 说一下排行榜公布的那个具体实现过程
- 项目中如何使用多线程?
- 那累加的线程如何和其他线程做交互的?
- 往系统中导入数据的时候会遇到什么问题?
- 导入时,进度条是通过什么技术实现的?
- 返回前端是怎么返回的?
- 前端机制,websocket有没有了解
- 项目中前端向后端传数据是怎么传的。
- 项目中日志是如何实现的。
- 场景题:写日志类满足多线程向文件中写日志,设计一下需要实现哪些方法,说一下大概思路。
- 项目中登录功能如何实现的,使用了哪些技术。
- 使用的用户量是多大?
- 假如用户量大的情况下,那会出现哪些性能瓶颈?
- 如何解决那个页面刷新过慢的问题?
- sql优化,刚开始是怎么做的,后期又是怎么去优化的?
- 项目的多用户高并发高访问量的解决办法。
- 那你在这个项目中最大的成就感是什么?
- 那你开发项目主要的优势在哪?
- nginx有哪些了解?
- 如果一个session在一台服务器上保存,下一次session请求时,nginx反向代理把我的session请求转发到另一台服务器上,这种情况该怎么处理?
HR面
- 自我介绍
- 职业规划
- 报学校专业是怎么考虑的?
- 工作城市
- 你是独生子女吗?
- 那你有女朋友吗?
- 那你们出来面试都了解过哪些企业?
- 有没有offer?
- 说说你的优缺点?
- 到后期你们每个人手上有好几个offer,哪些因素决定你们选择这家公司?
- 你更倾向哪种公司?有什么特别的点?
- 你大学有没有特别难忘的经历或者项目分享一下的?
- 团队合作中遇到什么问题?
- 对互联网加班有什么看法?
- 如果你对你的上司不满意,你应该怎么做?
- 那你现在的技术薄弱点在哪里,怎么去突破?
- 你的兴趣爱好有哪些?
- 现在进度最快的公司是哪家?
- 拿到哪几家offer,是否谈过薪资等
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/135806.html