`
flyfoxs
  • 浏览: 297755 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论
文章列表
一句话概况: 不考虑缓存, 那么装载路径就是,先Classpath, 然后War包,当前工程, 最后才是Tomcat相关目录. 不考虑缓存,是因为缓存只是用来加快速度,对外不调用展现出的逻辑效果是可以忽略的.   下图是一个概况的流程图, 简介起见,绘图过程中移除了缓存功能. (个了感觉还是有些逻辑还是有些复杂的,图画出来了,自己看着都觉得还是不清楚,但是也没发现可以改进的地方)        下面是关键的代码,已经添加了注释. //WebappClassLoader.loadClass (Tomcat 7.0) @Override public s ...
多线程之--2种办法让HashMap线程安全 多线程之--synchronized 和reentrantlock的优缺点 多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync)     HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全.   方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的. 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现. 方法二:重新改写了 ...
Oracle事务的隔离级别有2总, Read Commitment, Serializable, Read Only (另外还有2种事务隔离级别,Read Uncommitted, Repatable Read,Oracle没有单独提供.)   Read Only, 看名字就比较简单,在此我们不做讨论,下面主要分析一下Read Commitment, Serializable.  ...
Log4J是如何打印出行号的呢,之前一直以为是通过JAVA的反射.今天特意去查了一下,JAVA的方式好像没有提供这样的接口.于是研究了一下Log4J的代码,现在分享出来.   开门见山: 直接开门见山的讲重点, 其实要获得JAVA的行号,Log4j就 ...
  首先纠正一个误区: 热部署不是我们在Eclipse里面修改了代码不用重启就可以持续调试. 详情可以参考上一篇博文: 热部署和"Hot Code Replace"的区别    http://flyfoxs.iteye.com/blog/2078863   热部署有一个缺陷,就是很容易导致内 ...
最近复习JAVA类加载的相关知识,看到了热部署的实现原理,突然感觉这个好像不是以前Eclipse调试Tomcat的时候,修改代码不需要重启就可以调试的功能.查阅资料比较之后,发现不需要重启就可以继续调试的功能是"Hot Code Replace",我个人比较这两者之间的区别如下:     1)如果源文件有修改 热部署会会导致JVM里面有2个不同的Class存在,他们的类加载器不一样.他不会修改JVM已有对象 "Hot Code Replace"会用新的Class替代原有的Class,并且已有的instance都会被替换.也就是现有系统相关对象 ...
上一篇博文: CGLIB学习札记---生成CLASS的命名规则 介绍了生成之类的命名规则, 在这个博文里面主要分析了下面3点: 1)Cglib如何生成的Class的二进制文件 2)Cglib生成的Class二进制(byte[])放哪 3)Cglib如何把二进制Load生成的Class   泛泛而谈,整个过程如下 就是Cglib根据父类,Callback, Filter 及一些相关信息生成key. 然后根据key 生成对应的子类的二进制表现形式 使用ClassLoader装载对应的二进制,生成Class对象,并缓存 最后实例化Class对象,并缓存 下面是相对应的关键代 ...
泛泛的谈,可以说,有时可以有时不可以. 那我们就具体些,直入主题,看疗效吧.下面是一个例子:   import java.util.LinkedList; import java.util.List; public class Api { public static final void main(String[] args) { int tmp = 10; change(tmp); //可以看到,传入的temp没有被修改掉 System.out.println(tmp); List<Integer> list = new Link ...
本文重点是在白话,不是数学上面的严格定义. 那首先要有一个业务场景,就好比上学,学习数据库,就要用到学生成绩. 在这,我们的业务场景就是对100个西瓜进行分类(已知生熟各半)   下面是针对上面场景,对各个术语的解释 准确率(Accuracy): 对所有西瓜分类正确的比率. 精确率(Precision): 挑出来的熟西瓜,有多少是正确的. 召回率(Recall) : 50个熟西瓜,有多少被分来到熟西瓜这个类别.   下面我们来分析各个术语有什么应用场景: Accuracy: 这个是我们最常用的,但是这个指标有一个缺点,就是当数据分来不均匀的时候,就没办法用于业务了. 比如, ...
什么是熵已经有了很多地方有过解释,在此本文只解释什么是交叉熵,相对熵. 这2个概念也十分容易记混. 看了多方资料后,突然有了醍醐灌顶的感觉,特来分享.   交叉熵: 官方解释:用P来表示Q分布, Q分布对应的平均编码长度. 白话解释:P的熵: 用P的最优编码,所对应的平均编码长度.这个时候已经有了一个编码本了,如果用这个密码本对Q来编码,这个时候的编码长度肯定就会变大了. 这个长度,就是交叉熵.  如何记忆:交叉熵,重点在交叉,也就是用你的编码来给我编码.交换(交叉)编码本.   相对熵: 官方解释:额外所需的编码长度 白话解释:相对熵是比原有的(P)熵变长了的,变 ...
历时40多天的Cisco全球AI 竞赛终于落下帷幕,虽然最终只得到第6名(总共有1000多人组成的300多支参赛队伍). 但是作为一个学习AI没多久的小白来说,已经非常知足了.整个竞赛的主题是:客户是否会持续订购公司服务的预测. 回想整个过程,感觉比做一个项目更辛苦,跟磨人, 但也收获颇多.   数据的理解: 说的是AI 维度的选取,但是最重要的还是数据的理解的理解,AI模型和算法虽然同样重要,但是只有对数据理解了才能够对数据进行正确的清洗.   数据的降维: 整个竞赛的数据有240多个维度,但是想对数据降维,还真不是好办的.使用了PCA也没什么思路.但是最后却从应用层面 ...
本系列是理解一些开源项目中已经存在的例子,并配上一些读书笔记,分享出来,也许对其他一些初学者有用, 如果对于分享出来的代码,有问题. 欢迎大家提问交流.   下面的代码节选至:  https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/notebooks/2_getting_started.ipynb   #@test {"output": "ignore"} import tensorflow as tf import numpy as np ...
EM与极大似然估计都是求解模型参数θ,使采样出现的可能性最大,并且EM依赖于极大似然估计.   EM是在抽样有隐含未知的属性,比如西瓜的根蒂脱落,无法统计到根蒂的形状.   EM求解的方法需要迭代下去:      1)也就是给出一个初始的θ,然后求解隐含变量Z的概率      2)根据隐含变量的概率,和抽样的变量. 求解对θ做极大似然估计 反复迭代上面这2步直到收敛.     极大似然估计是在模型已知的情况下,求解模型的参数,让抽样出现的概率最大. 有点类似于已知方程了,求解方程未知数.所以极大似然估计θ值是稳定的.   但是对于EM,由于有未知变量的存在,所以往往初 ...
之前一直知道装饰器可以增强一个已经存在的方法,Python也提供了annotation的方法,很好用. 但是再看flask login的扩展包的时候. 发现装饰器还可以实现回调函数的注册功能.   flask login就是通过下面的装饰器,来注册回调函数,当没有sessionID时,通过装饰器指定的函数来读取用户到session中. @login_manager.user_loader   下面写了一个简单的测试例子来演示这个功能.   import time import functools class Test(): #/**feature将调用c ...
import redis enable=True #enable=False def readRedis(key): if enable: r = redis.Redis(host='10.224.38.31', port=8690,db=0, password='xxxx') val = r.get(key) if val is None: print "can not find data for KEY:%s \n" % (key) retu ...
Global site tag (gtag.js) - Google Analytics