面试题集合

面试题【还好】

https://maimai.cn/article/detail?fid=1194350394&efid=KjnCYV66cQmMsqX6KQpMkQ&from=single_feed

 

蚂蚁金服面试题

https://blog.youkuaiyun.com/hang1995/article/details/88583835

一面


1、自我介绍、自己做的项目和技术领域

开放题

2、项目中的监控:那个监控指标常见的有哪些?

答:CPU、内存、IO 等等。建议下载个nmon工具,里面有各个指标。

数据库:Mysql(缓存命中、索引、单条SQL性能、数据库线程数、数据池连接数)

中间件:1.消息2、负载均衡3、缓存(包括线程数、连接数、日志)。

网络: 吞吐量、吞吐率

应用: jvm内存、日志、Full GC频率

3、微服务涉及到的技术以及需要注意的问题有哪些?

https://blog.youkuaiyun.com/steelren/article/details/76790552【优点,问题】

https://blog.youkuaiyun.com/weixin_42358062/article/details/80730782【微服务所用的技术】

4、注册中心你了解了哪些?

答:Consul 、Eureka、ZooKeeper

5、consul 的可靠性你了解吗?

https://luyiisme.github.io/2017/04/22/spring-cloud-service-discovery-products/?utm_source=tuicool&utm_medium=referral【和其他注册中心的对比】

6、consul 的机制你有没有具体深入过?有没有和其他的注册中心对比过?

https://blog.youkuaiyun.com/junerli/article/details/82287466【consul 的机制】

https://www.cnblogs.com/niejunlei/p/6514859.html【初步了解】

https://luyiisme.github.io/2017/04/22/spring-cloud-service-discovery-products/?utm_source=tuicool&utm_medium=referral【和其他注册中心的对比】

https://blog.youkuaiyun.com/maoyeqiu/article/details/77478732【consul 的架构】

https://blog.51cto.com/xiaoluoge/2133145【Consul + Nginx实现自动扩容平台】

7、项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理

答:(1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。 对于Spring而言,就是由Spring来控制对象的生命周期和对象之间的关系;IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由容器动态地将某种依赖关系注入到组件之中。

(2). 在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

(3). 在系统运行中,动态的向某个对象提供它所需要的其他对象。

(4). 依赖注入的思想是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。 总而言之,在传统的对象创建方式中,通常由调用者来创建被调用者的实例,而在Spring中创建被调用者的工作由Spring来完成,然后注入调用者,即所谓的依赖注入or控制反转。 注入方式有两种:依赖注入和设置注入; IoC的优点:降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。

AOP(Aspect Oriented Programming)

(1). AOP面向方面编程基于IoC,是对OOP的有益补充;

(2). AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了 多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的 逻辑或责任封装起来,比如日志记录,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

(3). AOP代表的是一个横向的关 系,将“对象”比作一个空心的圆柱体,其中封装的是对象的属性和行为;则面向方面编程的方法,就是将这个圆柱体以切面形式剖开,选择性的提供业务逻辑。而 剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹,但完成了效果。

(4). 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

(5). Spring实现AOP:JDK动态代理和CGLIB代理 JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理;其核心的两个类是InvocationHandler和Proxy。 CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ注解驱的切面实际上底层也是通过动态代理实现的。

(6). AOP使用场景:

Authentication 权限检查

Caching 缓存

Context passing 内容传递

Error handling 错误处理

Lazy loading 延迟加载

Debugging 调试

logging, tracing, profiling and monitoring 日志记录,跟踪,优化,校准

Performance optimization 性能优化,效率检查

Persistence 持久化

Resource pooling 资源池

Synchronization 同步

Transactions 事务管理

另外Filter的实现和struts2的拦截器的实现都是AOP思想的体现。

8、Spring Boot除了自动配置,相比传统的 Spring 有什么其他的区别?

为Spring 生态系统的开发提供一种更简洁的方式,提供了很多非功能性特性,例如:嵌入式 Server,Security,统计,健康检查,外部配置等等,主要体现在以下几点:

1.Spring Boot可以建立独立的Spring应用程序;

2.内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再做部署工作了;

3.无需再像Spring那样搞一堆繁琐的xml文件的配置;

4.可以自动配置Spring。SpringBoot将原有的XML配置改为Java配置,将bean注入改为使用注解注入的方式(@Autowire),并将多个xml、properties配置浓缩在一个appliaction.yml配置文件中。

5.提供了一些现有的功能,如量度工具,表单数据验证以及一些外部配置这样的一些第三方功能;

6.整合常用依赖(开发库,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM可以简化Maven的配置。当我们引入核心依赖时,SpringBoot会自引入其他依赖。

9、Spring Cloud 有了解多少?

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

10、Spring Bean 的生命周期

一个Bean从创建到销毁,如果是用BeanFactory来生成,管理Bean的话

Spring上下文中的Bean也类似,如下

1、实例化一个Bean--也就是我们常说的new;

2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入;

3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值

4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以);

5、如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法);

6、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;

7、如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。

8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法、;

注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton,这里我们不做赘述。

9、当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;

10、最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

另外我们这里描述的是应用Spring上下文Bean的生命周期,如果应用Spring的工厂也就是BeanFactory的话去掉第5步就Ok了

11、HashMap 和 hashTable 区别?

区别:Hashtable是线程安全的,效率比较低

Hashtable既不支持Null key也不支持Null value。Hashtable的put()方法的注释中有说明

Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。

HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍

Hashtable在计算元素的位置时需要进行一次除法运算,而除法运算是比较耗时的

HashMap为了提高计算效率,将哈希表的大小固定为了2的幂,这样在取模预算时,不需要做除法,只需要做位运算。位运算比除法的效率要高很多。

HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口

12、Object 的 hashcode 方法重写了,equals 方法要不要改?

不需要,Ojbect类中有两个方法equals、hashCode,这两个方法都是用来比较两个对象是否相等的,如果两个对象相等(equal),那么必须拥有相同 的哈希码(hash code)

即使两个对象有相同的哈希值(hash code),他们不一定相等

重写equals()方法就必须重写hashCode(),但重写hashcode方法不一定要重写equals方法

13、Hashmap 线程不安全的出现场景

用ConcurrentHashMap 线程安全

多线程处理时hashmap线程不安全

首先hashmap里这个size没有用volatile关键字修饰,代表这不是一个内存可见的变量,线程操作数据的时候一般是从主存拷贝一个变量副本进行操作,操作完成过后在把size的值写回到主存size的

线程不安全问题应该属于并发问题之一的,属于相对高级的问题了。这个时候的问题已经不仅仅局限于代码层面了,很多时候需要结合JVM一起分析了

14、线上服务 CPU 很高该怎么做?有哪些措施可以找到问题

定位出现问题的堆栈信息排查具体问题

1、top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。

2、ps命令: Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。

3、jstack: Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

4、pstack:Linux命令。可以查看某个进程的当前线程栈运行情况

15、JDK 中有哪几个线程池?顺带把线程池讲了个遍

JUC提供了调度器对象Executors来创建线程池,可创建的线程池有四种

1、newFixedThreadPool创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。

2、newCachedThreadPool创建一个可缓存的线程池。这种类型的线程池特点是:

1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。

2).如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。

3、newSingleThreadExecutor创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行(我觉得这点是它的特色)。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的 。

4、newScheduleThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer。(这种线程池原理暂还没完全了解透彻)

15、SQL 优化的常见方法有哪些

查询条件减少使用函数,避免全表扫描

减少不必要的表连接

有些数据操作的业务逻辑可以放到应用层进行实现

可以使用with as

尽量避免使用游标,因为游标的效率较差

不要把SQL语句写得太复杂

不能循环执行查询

用 exists 代替 in

表关联关系不要太纠结

查询多用索引列取查,用charindex或者like[0-9]来代替%%

inner关联的表可以先查出来,再去关联leftjoin的表

可以进行表关联数据拆分,即先查出核心数据,再通过核心数据查其他数据,这样会快得多

参考SQL执行顺序进行优化

表关联时取别名,也能提高效率

使用视图,给视图建立索引进行优化

使用数据仓库的形式,建立单独的表存储数据,根据时间戳定期更新数据。将多表关联的数据集中抽取存入一张表中,查询时单表查询,提高了查询效率

对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

17、SQL 索引的顺序,字段的顺序

https://blog.youkuaiyun.com/gang_strong/article/details/54289433【不错,还有索引优化】

18、查看 SQL 是不是使用了索引?(有什么工具)

在select语句前加上EXPLAIN即可

19、TCP 和 UDP 的区别?TCP 数据传输过程中怎么做到可靠的?

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种

1)为了保证数据包的可靠传递,发送方必须把已发送的数据包保留在缓冲区;

(2)并为每个已发送的数据包启动一个超时定时器;

(3)如在定时器超时之前收到了对方发来的应答信息(可能是对本包的应答,也可以是对本包后续包的应答),则释放该数据包占用的缓冲区;

(4)否则,重传该数据包,直到收到应答或重传次数超过规定的最大次数为止。

(5)接收方收到数据包后,先进行CRC校验,如果正确则把数据交给上层协议,然后给发送方发送一个累计应答包,表明该数据已收到,如果接收方正好也有数据要发给发送方,应答包也可方在数据包中捎带过去。

20、说下你知道的排序算法吧

常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等

21、查找一个数组的中位数?

通过二分查找法来找中位数

基本思想是:假设ar1[i]是合并后的中位数,那么ar1[i]大于ar1[]中前i-1个数,且大于ar2[]中前j=n-i-1个数。通过ar1[i]和ar2[j]、ar2[j+1]两个数的比较,在ar1[i]的左边或者ar1[i]右边继续进行二分查找。对于两个数组 ar1[] 和ar2[], 先在 ar1[] 中做二分查找。如果在ar1[]中没找到中位数, 继续在ar2[]中查找。

算法流程:

1) 得到数组ar1[]最中间的数,假设下标为i.

2) 计算对应在数组ar2[]的下标j,j = n-i-1

3) 如果 ar1[i] >= ar2[j] and ar1[i] <= ar2[j+1],那么 ar1[i] 和 ar2[j] 就是两个中间元素,返回ar2[j] 和 ar1[i] 的平均值

4) 如果 ar1[i] 大于 ar2[j] 和 ar2[j+1] 那么在ar1[i]的左部分做二分查找(i.e., arr[left ... i-1])

5) 如果 ar1[i] 小于 ar2[j] 和 ar2[j+1] 那么在ar1[i]的右部分做二分查找(i.e., arr[i+1....right])

6) 如果到达数组ar1[]的边界(left or right),则在数组ar2[]中做二分查找

时间复杂度:O(logn)。

 

阿里巴巴面试题

 

  1. 多个线程同时读写,读线程的数量远远大于写线程,你认为应该如何解决并发的问题?你会选择加什么样的锁?

ReadWriteLock读写锁

https://blog.youkuaiyun.com/qq_19431333/article/details/70568478【读写锁的原理】

https://www.cnblogs.com/xrq730/p/4979021.html【主要是锁的原理,其他锁大致类同】

  1. JAVA的AQS是否了解,它是干嘛的?

https://www.cnblogs.com/waterystone/p/4920797.html【比较详细】

  1. 除了synchronized关键字之外,你是怎么来保障线程安全的?

 lock

  1. Tomcat本身的参数你一般会怎么调整?

https://www.cnblogs.com/laojiao/p/9575383.html【内有详细JVM调优】

  1. 你有没有用过Spring的AOP? 是用来干嘛的? 大概会怎么使用?

拦截器,安全校验,系统监控等

  1. 如果一个接口有2个不同的实现, 那么怎么来Autowire一个指定的实现?

       @AutoWired

  @Qualifier("service")

  AServlce aServlce;

  1. 如果想在某个Bean生成并装配完毕后执行自己的逻辑,可以什么方式实现?

@Component

public class InitMethodTest {

    @PostConstruct

    public void initMethod(){

        System.out.println(">>>>>>>>>initMethod<<<<<<<<<<<");

    }

}

  1. SpringBoot没有放到web容器里为什么能跑HTTP服务?

内置了tomcat

  1. SpringBoot中如果你想使用自定义的配置文件而不仅仅是application.properties,应该怎么弄?

https://blog.youkuaiyun.com/wsjzzcbq/article/details/82349107

  1. SpringMVC如果希望把输出的Object(例如XXResult或者XXResponse)这种包装为JSON输出, 应该怎么处理?

1、web工程lib中加入jackson所需jar包:jackson-core-asl-1.9.9.jar、jackson-mapper-asl-1.9.9.jar

2、在applicationContext.xml中加入jackson的配置

3、在你的action中直接使用注解的方式"@ResponseBody"自动将返回值转化成json格式

  1. 如果有很多数据插入MYSQL 你会选择什么方式?

insert(多行数据)

  1. 如果查询很慢,你会想到的第一个方式是什么?索引是干嘛的?

没有加索引,加快查询速度。索引原理:https://www.cnblogs.com/boothsun/p/8970952.html【优秀】

  1. 查询死掉了,想要找出执行的查询进程用什么命令?找出来之后一般你会干嘛?

1.ps axu,kill -9

1.mysql命令: show processlist 

1.https://jingyan.baidu.com/article/19020a0a605845529d2842fa.html

1.https://www.cnblogs.com/yanyujie/p/6022418.html

  1. 读写分离是怎么做的?你认为中间件会怎么来操作?这样操作跟事务有什么关系?

读写分离:https://blog.youkuaiyun.com/camhan/article/details/73368725

中间件:https://blog.youkuaiyun.com/l1028386804/article/details/82693281

消息中间件的分布式事务:https://www.jianshu.com/p/66b7f60492a0

分布式事务:https://blog.youkuaiyun.com/qq_27384769/article/details/79303942

  1. 分库分表有没有做过?线上的迁移过程是怎么样的?如何确定数据是正确的?

分库分表:https://www.cnblogs.com/butterfly100/p/9034281.html

线上的数据迁移:https://blog.youkuaiyun.com/bjweimengshu/article/details/79984090

如何确定数据是正确的:编写Java代码做数据迁移,随机抽样,检测数据是否正确,正确那其他数据也是正确的。(还是得根据具体业务具体分析,出迁移方案,评估迁移方案,最后实施)

  1. 你知道哪些或者你们线上使用什么GC策略? 它有什么优势,适用于什么场景?

没关注过。

GC策略:

https://blog.youkuaiyun.com/qq_35503221/article/details/80313129【大概】

https://www.cnblogs.com/haitaofeiyang/p/7811311.html【大概】

CMS:

https://blog.youkuaiyun.com/wxy941011/article/details/80616843

https://blog.youkuaiyun.com/zqz_zqz/article/details/70568819

G1:

https://www.jianshu.com/p/0f1f5adffdc1

https://blog.youkuaiyun.com/qq_32252917/article/details/83719629

https://www.cnblogs.com/oldtrafford/p/6883796.html【优质】

 

  1. JAVA类加载器包括几种?它们之间的父子关系是怎么样的?双亲委派机制是什么意思?有什么好处?

https://blog.youkuaiyun.com/qq_33583322/article/details/81239508

  1. 如何自定义一个类加载器?你使用过哪些或者你在什么场景下需要一个自定义的类加载器吗?

https://www.cnblogs.com/szlbm/p/5504631.html【自定义加载器的使用】

自定义类加载器的使用场景:

1.类字节码加密技术。

2.编写框架代码 , 需要动态加载很多类和资源的时候

  1. 堆内存设置的参数是什么?

https://blog.youkuaiyun.com/qq_34707744/article/details/79287403

https://blog.youkuaiyun.com/u013381397/article/details/71080535

G1参数优化:

https://blog.youkuaiyun.com/homtoyeah/article/details/82227781

https://blog.youkuaiyun.com/lijingyao8206/article/details/80566384

  1. HashMap和Hashtable的区别。

https://www.cnblogs.com/beatIteWeNerverGiveUp/p/5709841.html

  1. 实现一个保证迭代顺序的HashMap。

https://blog.youkuaiyun.com/zheng0518/article/details/42197947LinkedHashMap实现原理】

  1. 说一说排序算法,稳定性,复杂度。

https://www.jianshu.com/p/916b15eae350

  1. JVM如何加载一个类的过程,双亲委派模型中有哪些方法?

https://www.cnblogs.com/dooor/p/5289994.html

  1. TCP如何保证可靠传输?三次握手过程?

https://www.cnblogs.com/wzyxidian/p/5896456.html【TCP如何保证可靠传输】

https://www.cnblogs.com/laowz/p/6947539.html【三次握手过程】

https://blog.youkuaiyun.com/baixiaoshi/article/details/67712853【为什么三次握手四次挥手】

京东面试题

  1. java常用的数据结构有哪些?哪些是线程安全的?是怎么保证线程安全的?

https://www.cnblogs.com/michaelwang2018/p/9606209.html

  1. Redis中的Lua有没有使用过? 可以用来做什么? 为什么可以这么用?

Lua:

https://www.cnblogs.com/huangxincheng/p/6230129.html

Lua的作用:

https://www.zhihu.com/question/20296452

  1. 线程池内部工作原理可以说一下么?

https://www.cnblogs.com/cm4j/p/thread-pool.html【还好】

https://blog.youkuaiyun.com/u010963948/article/details/80573898【很好】

https://www.cnblogs.com/xrq730/p/4856453.html【偏使用】

 

  1. 死锁是什么意思,形成条件是什么?出现死锁是可以通过什么方式去排查。

形成条件:https://blog.youkuaiyun.com/beyond_2016/article/details/81326921

排查死锁:https://www.cnblogs.com/aflyun/p/9194104.html

排查死锁:https://blog.youkuaiyun.com/yu616568/article/details/46417319

  1. 在交易过程中如何放在用户在支付时的重复支付(交叉支付),请写出你了解的方案或使用的过的方案。

给支付单搞个唯一业务id,添加的时候进行一次查询。(Redis缓存)。技术解决不了的,靠运营解决。

消息队列,保证重试机制OK,网络,完全,稳定性,对账。

http://www.pc0359.cn/article/azjc/28135.html

https://zhidao.baidu.com/question/326895947735414605.html

http://www.mpaypass.com.cn/news/201808/09171954.html

  1. 数据库索引有哪几种,他们之间的区别。

http://www.php.cn/mysql-tutorials-407751.html

  1. 程序开发时通过开发工具DeBug调试时,控制台显示的内容都包含什么?哪些内容可以帮助你发现问题和解决问题。

  2. RPC通信过程中,假设A系统提供了一个方法入参是一个JavaBean,出参也是一个JavaBean。另外两个系统B系统、C系统调用接口,调用方B想让提供方A增加一个返回参数,假设服务提供方A增加了返回参数,请问C系统调用方需要做什么处理?

视乎,不需要做什么处理。用json传值。

  1. 了解哪些设计模式,用伪代码实现一个你熟悉的设计模式。

https://blog.youkuaiyun.com/zhangerqing/article/details/8245560

  1. 讲一下怎么使用分布式锁。

Redis

http://www.cnblogs.com/rinack/p/8950389.html

https://www.cnblogs.com/cmyxn/p/9047848.html

  1. 说说HashMap的原理, 以及HashMap如何扩充bucket的大小。

https://www.cnblogs.com/yuanblog/p/4441017.html【原理】

http://www.cnblogs.com/yanzige/p/8392142.html【扩容】

  1. Redis的Pipeline是用来干什么的?

https://www.cnblogs.com/littleatp/p/8419796.html

  1. Mysql索引的分类(Btree, hash),各自使用什么情况 。

https://www.jianshu.com/p/459f530a1d4a

https://www.yidianphp.com/archives/811

  1. 说说Myisam, Innodb区别。

https://www.jianshu.com/p/658efd890c4b

  1. 知道哪些负载均衡算法。

https://www.cnblogs.com/szlbm/p/5588555.html

https://www.cnblogs.com/data2value/p/6107450.html

http://www.cnblogs.com/will-shun/archive/2017/09/22/7574644.html

  1. 说一下Btree的查找原理。

https://blog.youkuaiyun.com/u013967628/article/details/84305511

  1. 简述三次握手,如果c端发起握手请求,s端无法立刻建立连接应该回应什么?

https://blog.youkuaiyun.com/qq_34386891/article/details/80515912

https://baijiahao.baidu.com/s?id=1614404084382122793&wfr=spider&for=pc

https://www.bbsmax.com/A/kPzOnwQdxn/

去哪儿网面试题

 

  1. 自我介绍,项目介绍。

  2. mysql数据库调优。

https://blog.youkuaiyun.com/zhangbijun1230/article/details/81608252【极好】

  1. java对象四种引用。

https://www.cnblogs.com/zhenyimo/p/6688792.html

  1. GC原理。

https://blog.youkuaiyun.com/lilong329329/article/details/82222713

  1. jvm内存结构。

https://www.cnblogs.com/jiyukai/p/6665199.html

  1. 说一下你学过jvm 在书写代码上对你有什么帮助和提高。

会关注对象的大小,取值的多少。

  1. 千万数据量的查询你会怎么做?

分库,分表

  1. HashMap在jdk1.7和1.8的区别,为什么引入这个概念?hash碰撞怎么解决,为什么1.8要比1.7更好,好在哪?

  2. 关于你的项目,如果并发很大,你会怎么改造。

用spring cloud,搭建多台机器,nginx负载均衡,数据库分库分表。

  1. 方法区里什么样的对象有可能被回收。

https://blog.youkuaiyun.com/lp1791803611/article/details/53284160

  1. 线上cpu飙升100%你怎么处理。

https://www.cnblogs.com/zhangshaolin/p/10187867.html

  1. 频繁FullGC怎么处理。

https://blog.youkuaiyun.com/bleuesprit/article/details/80012827【一般】

https://blog.youkuaiyun.com/n8765/article/details/50911742【还行】

https://caogen81.iteye.com/blog/1513345【一般】

  1. 线程池创建有几种,为什么创建定长的线程池个数最好是5,10,15这样的数字。

网上无方案,估计得去看源码了,后面再说

  1. linux命令。

 

  1. 伊甸区和幸存区可动态变化吗?

查资料了,会,

为什么?

不明白。不知道这个问题的意义所在

  1. redis和memcached区别。

https://www.cnblogs.com/457248499-qq-com/p/7392653.html

https://blog.youkuaiyun.com/TiaoZhanJi_Xian/article/details/80301976【还好】

  1. 说几个jdk命令,jmap是什么意思。

jps,

https://www.jianshu.com/p/a4ad53179df3【jmap】

  1. 如果并发很大,你对数据的正确性怎么保证。

https://yq.aliyun.com/ask/38365【一般】

 

饿了么面试题

  1. http和https的区别,https原理,http2.0与1.0的区别。

 

  1. Java的垃圾回收机制,Java文件加载机制,tomcat类加载机制,锁机制,jvm原理及线上调优,jvm内存模型。

  2. 多线程,有哪些可以保持进程同步的方法,创建线程的几种方法,对i++多线程访问你会怎么做。

  3. Java的设计模式,单例有什么模式,懒汉为什么加volotile,volotile的内存屏障,如何避免死锁。

  4. 考虑单例模式的编写,要线程安全且内存消耗小(剑指offer原题)。

  5. String、StringBuilder、StringBuffer区别;String类能被继承吗?为什么?

  6. 在白纸上手写二分法排序算法(lintcode上原题);二分查找的思想。

  7. 查找单链表中倒数第k个节点的算法,手写(lintcode上原题);最常见的排序算法你见过哪些,快排的基本思想及时间复杂度。

  8. 常见的数据结构有哪些。

  9. hashmap、hashcode一样,不equals怎么处理 ;hashcode实现原理,currentHashMap原理,实现细节,怎么实现同步的;类为什么要有hascode方法,是不是主要在集合类中都要实现hashcode方法;equals方法怎么实现;两个不同的对象可能有相同的hashcode值吗;常用集合有哪些。

  10. tcp三次握手,四次挥手协议。

  11. 架构设计一个开发性问题,设计一个Nginx管理的中间件,怎么设计。

  12. 所有的类都继承与object,你用过object类的直接子类有哪些,object类常用的方法有哪些。

  13. Java会出现内存泄漏吗,如果回,在哪种情况下?

  14. 抽象类和接口的区别。

  15. 平时怎么扩展自己的专业知识水平。

百度面试题

  1. 什么是 Java 的反射机制。

  2. Cookie 和 Session的区别。

  3. get 和 post请求的区别。

  4. IOC的优点是什么。

  5. IO 和 NIO的区别,NIO优点。

  6. JRE、JDK、JVM 及 JIT 之间有什么不同。

  7. Hashcode 的作用。

  8. 简述一致性 Hash 算法。

  9. 为什么在重写 equals 方法的时候需要重写 hashCode 方法?equals与 hashCode 的异同点在哪里。

  10. 为什么 Map 接口不继承 Collection 接口。

  11. 说出几点 Java 中使用 Collections 的最佳实践?

  12. GC是什么?为什么要有GC。

  13. 什么时候会导致垃圾回收。

  14. GC 有几种方式?怎么配置。

  15. 什么时候一个对象会被GC? 如何判断一个对象是否存活。

  16. 垃圾回收器的基本原理是什么?

  17. Serial 与 Parallel GC之间的不同之处。

  18. JVM 中一次完整的 GC 流程是怎样的? 对象如何晋升到老年代。

  19. 吞吐量优先和响应优先的垃圾收集器选择。

  20. 说说你知道的几种主要的jvm 参数。

  21. Java中存在内存泄漏问题吗?请举例说明。

  22. 什么是线程,多线程的优点是什么?以及简单说一下多线程的几种实现方式。

  23. ThreadLocal 用途是什么,原理是什么,用的时候要注意什么?

  24. 线程池是什么?为什么要使用它?如何创建一个Java线程池?

  25. ThreadPool用法与优势可以说一下么?

  26. synchronized 的原理是什么?synchronized 和 ReentrantLock 有什么不同?

  27. 有T1,T2,T3三个线程,怎么确保它们按顺序执行?怎样保证T2在T1执行完后执行,T3在T2

  28. 行完后执行同步块内的线程抛出异常会发生什么?

  29. 什么是乐观锁(Optimistic Locking)?如何实现乐观锁?如何避免ABA问题。

  30. Java中活锁和死锁有什么区别?

  31. Executors类是什么? Executor和Executors的区别?

  32. 什么是设计模式(Design Patterns)?你用过哪种设计模式?用在什么场合?

  33. 你能写出三种单例模式实现么?

  34. 你知道Google是如何在一秒内把搜索结果返回给用户?

  35. 高并发下,如何做到安全的修改同一行数据?

  36. 如何避免浏览器缓存。

  37. 大型网站在架构上应当考虑哪些问题?

  38. 最近有在看什么书么,印象最深刻的是什么?

  39. 你们线上应用的 JVM 参数有哪些?

  40. 能简单说下你对算法的理解么?

面试心得

1.准备要充分,知识面要尽量的广,同时深度也要够。

2.面试安排上,如果不着急,尽量给自己留多时间,两天一家,及时做总结和补充。

3.心态要放平,当做一次技术交流,面试要看一部分的运气,也要看一些眼缘,有的面试官一张嘴你就能感觉到你这次面试完了。想去的公司没有面试好,不要气馁,继续加油准备。

4.简历投递方面,拉勾上投了很多经常不匹配,可能是我学历问题(自考本),有一些打击自信心,如果有同样感受的,不妨换BOSS或者其他平台。避免打击自信心。

5.写简历一定要体现自己的优势,最好能体现类似于,用到了什么技术,解决了什么问题。简历上写到的一定要胸有成竹。

6.类似于你的优势是什么,你觉得你项目中做的比较好的地方有哪些,你能给公司带来什么,这种问题心里要先想一些,免得临场发挥容易紧张说不好。

7.我所经历的面试,一般技术面最少是两轮。如果一轮后让你走了,而你还自我感觉良好,那我觉得你有必要回顾一下面试内容,并一条一条找找该问题的相关内容,大部分问题就在于你没有答到点子上,可能是深度不够,也可能是扩展不够,继续加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值