JVM运行时数据区域

方法区: 用 于存储虚拟机加载的类信息,常量,静态变量,JIT编译后的代码,所有线程共享

堆:所有线程共享,用来存储实例对象。

虚拟机栈:线程私有,生命周期与线程相同,每个方法被执行的时候创建一个栈帧,一个方法的调用就是栈帧从入栈到出栈的过程。

栈帧的结构:本地变量表,操作数栈,动态链接,方法出口。

本地变量表:存放各种基本数据类型,对象引用,returnAddress(指向一个opcode)

本地方法栈:跟虚拟机栈类似,用来支持本地方法的调用

程序计数器:存储当前线程所执行的字节码的指示器,改变程序计数器的值来改变下一条执行的指令。

如果当前执行的是Java代码,程序计数器保存JVM正在执行的opcode的地址,如果是native代码,程序计数器的值是空*/

类加载机制

双亲委托机制:Java虚拟机的体系结构分为4层,Bootstrap Classloader,Extension Classloader,Application Classloader

User Classloader。

/*如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器去完成。

每一层的类加载器都把类加载请求委派给父类加载器,直到所有的类加载请求都应该传递给顶层的启动类加载器。

如果顶层的启动类加载器无法完成加载请求,子类加载器尝试去加载,如果连最初发起类加载请求的类加载器也无法完成加载请求时

,将会抛出ClassNotFoundException,而不再调用其子类加载器去进行类加载。

自定义Classloader,继承Classloader,覆盖findClass方法,defindClass.

jvm内存模型

 
   

JMM main-memory(主存) 和 工作内存  一个进程只有一个主存 对应多个 线程,一个线程对应一个工作内存。

tomcat调优

1.运行环境优化(操作系统 JDK版本)

2.集成apache处理静态页面

3.与apache集群

4.调节tomacat内存大小,禁用DNS,调节并发数。

spring事务传播机制

1.编程式事务

transcationTemplate 或 paltformTranscationManager

2.申明式事务

使用AOP插入

spring容器类型

1.BeanFactor 及子接口 ApplicationContext

2.万物皆bean

引用计数GC

计数器初始化为0,对象被引用一次,计数器+1,对象超出作用范围(方法执行结束),计数器-1,当计数器为0时,回收。

GC 重写对象finalize 并重新引用将不会被回收

反射 动态代理      

1.使用 Java 反射 API 可以直接调用 Java 类的方法。

2 动态代理类是利用java的反射机制生成。

利用java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口.

比如HelloService是代理类和委托类的共同接口,其中HelloServiceIml是委托类,则生成动态代理类的方法。

Class claz = Class.forName(ClassPath);

Method m1 = claz.getDeclaredMethod("hwaha");

m1.invoke(claz.newInstance());

hibernate缓存机制

一级缓存(Session的缓存)

只缓存同一个事务的数据,不会有并发问题。生命周期等于事务生命周期。默认配置。

二级缓存(SessionFactory的缓存)

进程或集群范围,根据缓存大小配置,超出后会存在硬盘,需要第三方插件管理。

查找顺序:一级 -- 二级 -- 重新数据库查询  查询完后维护缓存

数据库隔离级别 hibernate事务隔离级别

1.read commit  可读取为提交数据

2.read uncommit 不可读取未提交数据

3.repeatable read 锁定所有被查询数据

4.servalizable 禁止并发执行

HTTP协议 TCP协议 socket

Socket为底层通信机制,HTTP或TCP/IP都是基于socket通信。

HTTP为短链接 客户端不会确认服务器状态就直接发送请求。

TCP为常连接 一次连接需要三次握手。客户端请求服务器状态 服务器确认 正式连接

jquery 选择器

层叠选择器: $("form input")

基本过滤选择器:$("tr:first")

内容过滤选择器:$("div:contains('John')")

可视化过滤选择器:$("div:hidden")

属性过滤选择器:$("div[id]")

子元素过滤选择器:$("div span:first-child")

表单元素选择器:$(":input")

表单元素过滤选择器:$(":enabled")

 

springMVC实现机制

Spring MVC的工作原理

1. 将所有的请求提交给DispatcherServlet

2. DispatcherServlet找到多个HandlerMapping,找到处理请求的Controller

doService --> doDipatcher --> getHandler(request) --> getExecutionChain(path) --> ExecutionChain: Controller和path的映射关系

--> 将handler包装成HandlerAdapter,然后调用handle(request),返回ModelAndView。

--> 通过ModelAndView指定的viewName,找到对应的ViewResover,返回view

--> 调用view.render 渲染页面

1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。

2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

3.DispatcherServlet请请求提交到目标Controller

4.Controller进行业务逻辑处理后,会返回一个ModelAndView

5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

6.视图对象负责渲染返回给客户端。

Spring MVC的配置

启用注解:使用<context:component-scan base-package=''>标签

匹配静态资源:使用<mvc:resources mapping='' location=''>标签

配置RequestMappingHandlerMapping和RequestMappingHandlerAdapter

配置视图解析器:InternalResourceViewResolver

set 就是 map

JAVA中只有值传递,没有引用传递,值传递传递的是储存单元中的内容,如果是对象的话,也是讲内存地址作为内容传递,所以也是值传递。

contdownlantch 等待多个线程执行完毕。

四种线程池

//线程自动回收,当没有回收的线程时,池子会自动扩充

ExecutorService cachedThreadPoll =  Executors.newCachedThreadPool();

//指定池子大小,无可用线程则进入等待

ExecutorService fixedThreadPool =  Executors.newFixedThreadPool(10);

//可延时执行

ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);

//只有一个线程 保证任务执行顺序

ExecutorService executorService2 = Executors.newSingleThreadExecutor();

序列化 和 反序列化

序列化:将对象转换为字节序列的过程。也就是将对象保存到硬盘中。

反序列化:将字节序列转换为对象的过程。通过ObjectInputStream读取硬盘文件,

再强转为具体对象。

深度克隆

Way1:

list2.add(((Sheep)list1.get(0)).clone());

public Object clone() throws CloneNotSupportedException{

Sheep clonedSheep = (Sheep)super.clone();

return clonedSheep;

}

Way2:

重现对象克隆方法,然后序列化和反序列化。

判断线程是否相等

thread.getid();

1. 原子性,可见性

原子性:指的是一个操作是不可分割的,就说它具有原子性.可以通过同步技术让非原子性的操作变成原子性操作。

比如 int i = i + 1;是一个非原子性操作:先读取i的值,给i+1,再给i赋值。

可见性:一个线程修改了一个共享变量,另一个线程马上可以观测到修改的结果。volatile可以保证可见性,不能保证原子性

volatile的作用:

1. 保证可见性

2. 禁止重排序

2. wait, notify, notifyAll的使用

在多线程中,可以把一个对象作为事件对象。通过这个对象的wait,notify, notifyAll来完成线程之间的状态通知。

notify会唤醒一个等待中的线程,notifyAll会唤醒所有的等待线程。

3. memcached

memcached的服务端不提供分布式功能,是由客户端实现的

Memcached的分布式方法

http://blog.csdn.net/cywosp/article/details/23397179/ 一致性哈希

http://kb.cnblogs.com/page/42734/ 余数计算

基于Key-Value的散列表,通过CRC计算键值,将内容存储在不同的机器上。当散列表满了之后,通过LRU机制淘汰掉一部分内容,用以存储

新的内容。基于libevent.

4. 乐观锁,悲观锁

http://www.cnblogs.com/lcngu/p/5405890.html

乐观锁的思路:每次不加锁,认为没有冲突去完成某项操作。如果失败就重试(循环),直到成功为止。

乐观锁的实现:用CAS指令Unsafe类提供的基于CAS机制的native方法

悲观锁的思路:独占锁都是悲观锁,假设最坏的情况,确保只有没有冲突的时候才去执行,导致其他所有线程挂起,等待持有锁的线程释放锁。

悲观锁的缺陷:线程挂起和恢复的过程存在很大的开销,代价很大。

乐观锁的实例:java.util.concurrent下的原子类使用硬件提供的CAS机制实现同步就是乐观锁的实践。

悲观锁的实例:Java的synchronized关键字实现的互斥锁就是悲观锁(由JVM实现的锁)

中高级JAVA面试知识点(个人整理)的更多相关文章

  1. Java 面试知识点解析(三)——JVM篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  2. 5.7w字?GitHub标星120K的Java面试知识点总结,真就物超所值了

    如果你觉得在一些程序员平台获取到的资料太乱学习起来毫无头绪,但是单看<Java编程思想>相似的一类的Java圣经"枯燥无味",那我推荐你看一下这份GitHub获得过12 ...

  3. Java 面试知识点解析(二)——高并发编程篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  4. Java 面试知识点解析(四)——版本特性篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  5. Java 面试知识点解析(五)——网络协议篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  6. Java 面试知识点解析(六)——数据库篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  7. Java 面试知识点解析(七)——Web篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  8. web开发前端面试知识点目录整理

    web开发前端面试知识点目录整理 基本功考察 关于Html 1. html语义化标签的理解; 结构化的理解; 能否写出简洁的html结构; SEO优化 2. h5中新增的属性; 如自定义属性data, ...

  9. Java面试知识点之线程篇(三)

    前言:这里继续对java线程相关知识点进行总结,不能间断. 1.yield()方法 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执 ...

随机推荐

  1. NewCaffe

    NewCaffe

  2. 【BZOJ4455】小星星(动态规划,容斥)

    [BZOJ4455]小星星(动态规划,容斥) 题面 BZOJ 洛谷 Uoj 题解 题意说简单点就是给定一张\(n\)个点的图和一棵\(n\)个点的树,现在要让图和树之间的点一一对应,并且如果树上存在一 ...

  3. 【BZOJ2756】奇怪的游戏(二分,网络流)

    [BZOJ2756]奇怪的游戏(二分,网络流) 题面 BZOJ Description Blinker最近喜欢上一个奇怪的游戏. 这个游戏在一个 N*M 的棋盘上玩,每个格子有一个数.每次 Blink ...

  4. 【Python简介】

    一.Python的简介 1.什么是python? Python(发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用 ...

  5. bzoj2314: 士兵的放置(树形DP)

    0表示被父亲控制,1表示被儿子控制,2表示被自己控制.f表示最少士兵数,g表示方案数. 转移贼难写,写了好久之后写不下去了,看了一眼题解,学习了...原来还可以这么搞 比如求f[i][1]的时候,要在 ...

  6. 基于epoll封装的事件回调miniserver

    epoll技术前两节已经阐述过了,目前主要做一下封装,很多epoll的服务器都是采用事件回调方式处理, 其实并没有什么复杂的,我慢慢给大家阐述下原理. 在networking.h和networking ...

  7. C++实现成绩管理模拟系统

    C++实现基本的成绩管理系统 需求: 1-学生姓名等基本字段 2-学生成绩字段 3-实现成绩修改和基本统计输出 #include<iostream> #include<windows ...

  8. 通过socket实现多个连接并实现ssh功能

    一.前言 上一篇中我们已经知道了客户端通过socket来连接服务端,进行了一次数据传输,那如何实现客户端多次发生数据?而服务端接受多个客户端呢? 二.发送中文信息 在python3中,socket只能 ...

  9. pthread在Qt+Windows下的使用

    pthread是牛逼的跨平台线程库,无需多介绍. 下载pthread-win32,解压后将x86里的pthreadVC2.dll放到system32目录里,将pthreadVC2.lib放入项目中去, ...

  10. /etc/rc.d/里文件的作用

    rc.sysinit指的是系统启动不管进哪个运行级别必须做的初始化工作, rcn.d目录指的是系统进对应n的运行级别时候系统必须做的工作,目录下S打头的服务指进此运行级别时候启动的服务,而K打头的指离 ...