常见面试问题总结

【Java

1. 容器

1)队列(queue): 若Blocking:阻塞put/take  offer/peek poll 异常element/remove

a. PriorityQueue:comparator  堆排序

b. Deque:双向队列  linkedList  addFirst()

c. DelayQueue:类似timeTask,延迟期满才能提取元素

d. ConcurrentLinkedQueue:线程安全

2)数组(Array):注意左右边界校验,如arr!=null&&arr.length>1;

3)List:有序可重复,可接受null,索引方便,.subList()视图。

a. LinkedList,  ArrayList

b. CopyOnWriteArrayList:读写分离,写时复制加锁。开辟新空间,内存消耗多

4)Set:去重,必须实现equals方法。

a.hashSet,LinkedHashSet:快速查找,后者则是为了保证次序

b.SortedSet:如treeSet,底层实现的红黑树,保证有序

c. Collections.newSetFromMap:实现线程安全

5)Map:hashCode 数组 + equals linkedList put get

a. HashMap,LinkedHashMap:后者是为了保证次序

b.sortedMap:如treeMap,key保持排序状态

c. ConcurrentHashMap:锁分段技术,读写分析,写的时候,Segment加锁保护其名下的HashEntry,读的时候不加锁。

6)遍历:Iterator:指向第一个元素前一个,故要next。Foreach,实现Iterator即可用,单不可增删,会引起modCount变化,抛异常。

Comparablet内比较器  comparator 外比较器 策略模式

2. 并发

1)线程实现方法:Thread  runnable接口  callable接口

2)线程池:减少损耗(一开始就创建好),好管理

类别:newSiggleThreadPool(),newFixedThreadPool(workQueue长度不可控),newCachedThreadPool(线程数不可控),newScheduledThreadPool(),

内部:ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue(直接/有界/无界),ThreadFactory(worker线程),handler(DiscardPolicy/CallerRunPolicy))

方法:execute/submit Future.get FutureTask   shutdown/shutdownNow

3)常见类:ThreadLocal,内部ThradLocalMap,CountDownLatch, CyclicBarrier, Semaphore

4)Synchronized和Lock的区别

Lock:AQS AbstractQueuedSynchronized   jdk类,可冲入,不可中断,非公平

Synchronized: object final 1. jvm关键字 可冲入,可判断锁状态,可公平,大量同步,finally要释放锁。在不断优化,锁消除,锁粗化,monitorenter,monitorexist映射在内核上,影响开销

5)性能调优:

Atomic原子类,免锁容器,ConcurrentHashMap在java8使用CAS无锁算法,ReentrantReadWriteLock读写锁,  CAS,冲突检测,数据更新

3. IO

1. 字节流:OutputStream/InputStream,直接IO, 字符流:Writer/Reader,间接IO,需flush  字符字节转换,需要指定编码格式

2. 基本概念:while((read=inputStream.read(byteArr))>0) 硬盘-(阻塞)-> 内核  -(同步)-> 用户

3. FileLock Charset

4. IO和NIO的区别:观察者模式--> 事件机制 --> reactor设计模式 --> nio --> netty对nio进行了简单封装  jetty或tomcat

面向缓冲:ByteBuffer等,稍后处理,可移动,灵活  mark position limit capacity

非阻塞:FileChannel(阻塞)无法和Selcetor使用;ServerSocketChannel中设置,可配合Selcetor。Reactor模式

选择器 Selector selector = Selector.open(), register(selector, SelectionKey.OP_ACCPECT)

5. 实现案例:Netty EventLoopGroup ServerBootstrap group channel childHandler

4. 内存管理&JVM

1)GC内存模型:堆(新生代/老年代) 调整-Xms  方法区:永久代 j8用元空间代替; 栈:JVM栈(引用类型) Native栈

2)JVM内存模型:volatile 不能保证原子性,可以保证可见性,有序性  主内存,工作内存

3)清理:引用计数法,GCRoot:标记-清除  标记-复制  标记-整理

4)性能:JDK工具jconsole Jps Jstack Jmap;  内存泄露:jmeter+jps+MAT  CPU冲高:ps -ef | grep   jstack pid  top-Hp pid

5. 反射

1)反射:getClass .class Class.forName,getFields(); 提高性能,反射+缓存

2)双亲委派模型:BootStrap lib Extension lib\ext Application \lib  自定义

3)类加载器:classLoader  findClass  defineClass loadClass  代理增强

Apache tomcat  OSGI  javaAgent探针,main之前拦截  Java字节码  热部署等

6. Java8

1)lamada闭包:

匿名函数捕获一个外部变量(自由变量),那么它就是一个closure。

闭包是自带运行环境的函数final,当一个函数在定义它的作用域意外的地方被调用时,他访问的依然是定义它时的作用域。这种现象称之为闭包

2)Stream API:

Java8中的Stream是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作(bulk data operation)

借助于lamada表达式 java.util.stream,函数式语言+多核时代

.stream().parallelStream().map().readuce(),对stream的使用就是实现一个filter-map-reduce过程,产生一个最终结果

Stream.of("one","two","three","for"),filter(e->e.length()>3).peek(e->System.out.println("Filtered value:"+e)).map(String::toUpperCase).peek(e->System.out.pringtln("Mapped value:"+e)).collect(Collectors.toList());

【设计模式】

1. 代理模式

真实类在代理类里注册,代理类根据注册new一个真实类Object并运转

2. 观察者模式

当对象间存在一对多关系时,使用观察者模式。比如,当一个对象呗修改,则会自动通知它的依赖对象。行为型模式

client->Subjec(被观察者state容器注册,notifyUpdate)->Observer abstract ->o1,o2,o3(update方法)

3. 适配器模式

4. 装饰器模式

【框架】

1. Spring

IOC:主业务,自动注入而非自己维护 DI和DL(JNDI)

动态工厂Bean/静态工厂bean Bean的作用域 单例,原型 Bean后处理器(采用动态代理,对bean增强)。

2. Spring的IOC和DI

1)bean的装配:动态工厂:factory-bean="someFactory"   factory-method="getSomeService"     静态工厂:class=""  factory-method="getSomeService"

2)bean的作用域:singleton  prototype

3)bean后处理器:对bean创建的前后对bean进行增强

4)bean的生命周期  构造方法-> set值 -> BeanNameAware -> beanFactoryAware -> 执行后护理器前 -> InitializingBean-afterPropertiesSet -> initPost --> 执行后处理器后 -> 执行方法 --> DisposableBean-destroy -> destroy

5)xml方式

property/constructor-arg  name  value/ref

array/list/set/map/props

autowire

parent

6)注解方式

<context:compont-sacn base-package="com.huawei.ztj.di01">

@Compont

@Scope

@Value   @Resource

MyJavaConfig   @Configuration   @Bean  构造器

AOP:系统业务,织入而非混入

1. Proxy代理  java.lang.reflect.Proxy  使用:ISomeService target = new SomeServiceImpl(); ISomeService proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHander(){

@Override

public Object invoke(Object proxy, Method method, Object[] args) throwable {

..;  Object result = method.invoke(target, args);  ..;

}

});

2. 代理设计模式 : 代理类和目标类实现同一接口,代理类是对目标类的增强(仍包含目标类的逻辑)。好处:控制目标对象的访问,增强目标对象的功能。区别于:适配器模式(改变),装饰器模式(增强,方式不一样)。

3. AOP

1. 通知Advice 增强的系统功能  MethodBeforeAdvice AfterReturningAdvice  MethodInterceptor(aopalliance中的包)  ThrowsAdvice   CGLIB  无实现InvocationHandler

2. 顾问Advisor  切入点

<bean id="afterAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">  NameMatchMethodPointcutAdvisor

<property name="advice" ref="beforeAdvice"/>

<property name="patterns" value=".*Sec.*/.*T.*">  mappedName

</bean>

3.配置

<bean id="serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">     <bean class="org.springframework.aop.framework.autoproxy.advisorAutoProxyCreator"/>

<property name="target" ref="someService"/>

<property name="interfaces" value="com.huawei.ztj.di01.ISomeService"/>

<property name="interceptorNames" value="beforeAdvice"/>

</bean>

4. AspectJ

注解:"execution(" * *..ISomeService.doSome(..)")"   通知+顾问

XML:<aop:config>

<aop:pointcut expression="execution(* *..ISomeService.doSome(..))" id="doSomePointcut"/>

<aop:aspect ref="myAspect">

<aop:before method="myBefore" pointcut-ref="doSomePointcut"/>

</aop:aspect>

</aop:aspect>

</aop:config>

1. spring-aop包源码解读

外层:  Advice各个接口

support包:  Advisor 切入点,如NameMatchMethodPointcutAdvisor、RegexpMethodPointcutAdvisor

framework包:  拦截器

1)autoproxy:DefaultAdvisorAutoProxyCreator、BeanNameAutoProxyCreator

2)ProxyFactoryBean

3)JdkDynamicAopProxy、CglibAopProxyFactory  重点

下一步计划:core beans context    aspectJ aop:config  aop:pointcut  aop:aspect  aop:before  pointcut-ref  <aop:pointcut expression="execution(* *..ISomeService.doSome(..))" id="doSomePointcut"/>

2. SpringMVC

DispatcherServlet--> 映射处理器  处理适配器ModelAndView  视图解析(view)  视图渲染(Model)

1、DispatcherServlet前端控制器接收发过来的请求,交给HandlerMapping处理器映射器

2、HandlerMapping处理器映射器,根据请求路径找到相应的HandlerAdapter处理器适配器(处理器适配器就是那些拦截器或Controller)

3、HandlerAdapter处理器适配器,处理一些功能请求,返回一个ModelAndView对象(包括模型数据、逻辑视图名)

4、ViewResolver视图解析器,先根据ModelAndView中设置的View解析具体视图

5、然后再将Model模型中的数据渲染到View上

3. MyBatis

4. OSGI

5. SOA架构

1. RMI:https://www.cnblogs.com/ygj0930/p/6542811.html   学习参考:http://www.blogjava.net/zhenyu33154/articles/320245.html

RMI:stub  skeleton  接口Remote  注册:java.rmi.Naming.rebind("rmi://10.74.226.146:11099/demoService", demoService);  rmic生成桩和框架 JVM  rmiregistry注册程序运行

调用:IHello hello = (IHello) Naming.lookup("rmi://localhost:1099/hello");

RPC:系统网络服务,客户端和服务端句柄。

JNDI:Java Naming and Directory Interface 是一个应用程序设计的API

采用java的序列化   头疼的防火墙渗透

2. Spring HttpInvoker  它基于HTTP之上提供RPC,同时又使用了Java的对象序列化机制。

学习参考:https://www.cnblogs.com/lpc-xx/p/8556827.html

3. Hessian:Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能   二进制

web.xml注册   <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>

调用:HessianProxyFactory factory = new HessianProxyFactory();  HessianService hs = (HessianService)factory.create(HessianService.class, url);

私有的序列化机制  解决防火墙问题

4. Burlap:https://www.cnblogs.com/javalouvre/p/3730597.html  集中远程服务的区别   https://www.cnblogs.com/maybo/p/5190012.html

私有的序列化机制  解决防火墙问题

5. Http服务和RFC服务的区别:https://blog.csdn.net/wangyunpeng0319/article/details/78651998  看下客户端请求是否有http打头

6. 使用和发布web服务: https://blog.csdn.net/gray_li/article/details/78460213

7. 使用Spring MVC创建Rest API:

1) 【Spring集成】-SpringMVC创建REST API https://blog.csdn.net/fxkcsdn/article/details/80932349  n

【MySQL】

1)参考:https://blog.csdn.net/zhugewendu/article/details/73550414

2)

SQL和索引优化

优化数据库对象

优化InnoDB

磁盘优化

【TCP/IP】

【消息通知】

ActiveMQ:java, java系统配合默契  基于STOMP协议 Simple Text Orientated Message Protocol

RabbitMQ:Erlang  性能更强  基于AMQP(Advanced Message Queue Protocol)  而“语言中立”则意味着只要遵循 AMQP 的协议,任何一种语言都可以开发消息组件乃至中间件本身

基于Erlang,支持多种协议的消息Broker,通过插件支持STOMP协议   admin/Changeme_123   jms

HornetQ:基于JBoss

1. 整体架构

private int getCalledTimes(long minTime) {

int i = 0;

List<Long> removeList = new ArrayList<Long>();

for (int k = callTimes.size() - 1; k > 0; k--)

{

Long time = callTimes.get(k);

if (time > minTime)

{

i++;

}

else

{

removeList.add(time);

}

}

callTimes.removeAll(removeList);

return i;

}

【途径】

1. 书:Java编程思想,Java并发编程实战,effective java, Spring实战,

2. 网络: MOOC课程,Java技术栈, ImportNew

原文地址:https://www.cnblogs.com/zhitianji/p/9636387.html

时间: 2024-07-30 18:18:31

常见面试问题总结的相关文章

机器学习&amp;数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

http://www.cnblogs.com/tornadomeet/p/3395593.html 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大.

Android开发面试经——6.常见面试官提问Android题②(更新中...)

版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44560061 1.HttpURLConnection和HttpClient他们各自的优缺点是什么? HttpUrlConnection 在 2.3 以前的版本是有 bug 的,所以之前的版本推荐使用 HttpClient,但是 google 现在

(转)C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析

C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析 http://www.nowcoder.com/discuss/1826?type=2&order=0&pos=23&page=1 1.引言  本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵.文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见. 许多面试题看似简单,却需要深厚的基本功才能给出完美的解答.企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到

JS常见面试题目 选择的第几个radio,name一样都叫radiogroup

<html> <head> <script language="javascript"> function parse() { } </script> </head> <body> <form onsubmit = "return parse()"> <input name="radioGroup" type="radio"/> &

java异常常见面试问题

java异常常见面试问题 一.java异常的理解 异常主要是处理编译期不能捕获的错误.出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性. 处理过程:产生异常状态时,如果当前的context不具备处理当前异常的能力,将在heap上new出来一个异常对象,停止当前的执行路线,把产生的异常对象抛给更高层的context. Throwable:异常类    Error:系统异常:不能恢复:Exception :普通异常:可恢复 利用try/catch/finally处理异常 什么时候使用

Redis的那些最常见面试问题(转)

Redis的那些最常见面试问题         1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存.因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性 能最快的Key-Value DB. Redis的出色之处不仅仅是性能,Redi

好程序员Java教程分享Javamain常见面试问题

好程序员Java教程分享Javamain常见面试问题,Java程序员在参加面试的时候,在Javamain方面都会被问到哪些问题呢?为大家准备一些常见的Javamain的基础知识问题,帮助大家在面试前做好准备: 1.不用main方法如何定义一个类? 不行,没有main方法我们不能运行Java类. 在Java7之前,你可以通过使用静态初始化运行Java类.但是,从Java7开始就行不通了. 2.main()方法需要的参数不是字符串数组? 不是的,main()方法的参数必须是字符串数组. 但是,在引进

【转】常见面试之机器学习算法思想简单梳理

转:http://www.chinakdd.com/article-oyU85v018dQL0Iu.html 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内

常见面试之机器学习算法思想简单梳理

http://www.cnblogs.com/tornadomeet/p/3395593.html (转) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内大

常见面试之机器学习算法思想简单梳理【转】

前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内大点的公司里百度,阿里,腾讯,网易,搜狐,华为(华为的岗位基本都是随机分配,机器学习等岗位基本面向的是博士)等