YOU KNOW NOTHING , SNOW
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实现的锁)
YOU KNOW NOTHING , SNOW的更多相关文章
- POJ 3349 Snowflake Snow Snowflakes(简单哈希)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 39324 Accep ...
- Snowflake Snow Snowflakes(哈希表的应用)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 27312 Accep ...
- poj 3349:Snowflake Snow Snowflakes(哈希查找,求和取余法+拉链法)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 30529 Accep ...
- POJ 3349 Snowflake Snow Snowflakes
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 27598 Accepted: ...
- POJ 3349:Snowflake Snow Snowflakes(数的Hash)
http://poj.org/problem?id=3349 Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K T ...
- 哈希-Snowflake Snow Snowflakes 分类: POJ 哈希 2015-08-06 20:53 2人阅读 评论(0) 收藏
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 34762 Accepted: ...
- [poj3349]Snowflake Snow Snowflakes(hash)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 37615 Accepted: ...
- Codeforces Round #339 Div.2 C - Peter and Snow Blower
Peter got a new snow blower as a New Year present. Of course, Peter decided to try it immediately. A ...
- Codeforces Round #339 (Div. 1) A. Peter and Snow Blower 计算几何
A. Peter and Snow Blower 题目连接: http://www.codeforces.com/contest/613/problem/A Description Peter got ...
- Codeforces Round #180 (Div. 2) A. Snow Footprints 贪心
A. Snow Footprints 题目连接: http://www.codeforces.com/contest/298/problem/A Description There is a stra ...
随机推荐
- c#面向对象基础 封装、继承
一.封装 这是一种隐藏的特性.可以用一个公式来展示类的封装特性: 封装的类=数据 + 对此数据进行的操作(即算法) 通俗的说,封装就是:包起外界不必要知道的东西,只向外界展露可供展示的东西. 在面 ...
- 导入excle数据将excle数据插入到数据库
实现功能是,用户可以直接导入对应数据,或者用户下载模板,填写数据,导入模板数据.easyui实现 前台页面 { text : '日清导入', iconCls : 'icon-print', handl ...
- javascript控制开始日期,和结束日期在同一个月
/* * 控制开始日期,和结束日期 * 开始日期为当前月份,结束日期为当天 * 开始日期为之前月份,结束日期为最后一天 * @return string * @poseidon 2015-9-17 * ...
- chineseChess
最近学习了chineseChess的Qt实现,把一些东西总结一下: 实现功能: 1.人人对战 2.人机对战 3.网络版 一.基础性工作:(人人对战) 1.棋盘和棋子的绘制(QPinter,drawLi ...
- # 20145334赵文豪 《Java程序设计》第6周学习总结
20145334赵文豪 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 数据流 I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基 ...
- 有return语句情况下,try-catch-finally的执行顺序
重要结论: 1.不管有没有出现异常,finally块中代码都会执行 2.当try和catch中有return时,finally仍然会执行 3.finally是在return后面的表达式运算后执行的(此 ...
- 20145221高其&20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计
20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 l ...
- LNMP环境简易安装流程
1.关闭防火墙 [root@CentOS ~]# chkconfig iptables off 2.关闭selinux vi /etc/sysconfig/selinux //将SELINUX=enf ...
- word-break、word-wrap和其他文字属性
word-break: break-all; 控制是否断词.(粗暴方式断词)break-all,是断开单词.在单词到边界时,下个字母自动到下一行.主要解决了长串英文的问题. word-wrap: br ...
- sdk 更新的时连接不上dl-ssl.google.com解决办法
今天有朋友说sdk的更新不了,借了个VPN给他也没解决问题,后来还是他自己解决了,下面分享下经验 这里介绍一种不需要FQ的解决办法,修改C:\Windows\System32\drivers\etc下 ...