`
argan
  • 浏览: 129538 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
有时候,要研究一些java相关的东西,但是没有源代码,只有二进制的jar,同时这个jar呢,又被混淆过了,反编译很困难,为了研究需要,因此写了这么一个小东西,没几行代码,实现的功能有: * 修改className * 修改类里的methodName,fieldName * 修改interfaceName * 修改interface里的methodName   主要辅助研究混淆过的代码用的,配合jd-gui 就很方便了,功能很简单,而且还有一些已知的bug,例如,修改了一个类中的接口方法,需要将所属的接口(们)里的方法都修改掉(相应的会修改所有实现类)   代码放在google ...
要实现自己的class reload机制,首先需要明白我们面临什么样的问题,首先,虚拟机中使用到的Class都是由各种ClassLoader装载进来的,而绝大部分程序的开发者都不需要关心这个过程,我们面临的第一个问题就是需要将class装载这个过程拦截下来,让所有的需要reload 的class的装载都经过我们的机制,我们才有机会去执行我们的reload机制,因此我们需要拦截系统的ClassLoader,在class装载的时候实现自己的逻辑   jdk提供JVMTI(JVMDI,JVMPI),可以从底层的虚拟机里获取几乎所有虚拟机里发生的事件,我们可以通过捕获这些事件,加以处理,来实现我们的 ...
我们这里不讨论应用服务器的hot redeploy,因为应用大了这redeploy太费时间,我见过以前有人在weblogic上部署一个ear的时候,整整要花十多二十分钟,这个ear里有大量的ejb,每次修改一点点程序之后,就必须重新打包,部署,等待,郁闷....真不知道一天能干多少活。   当然,现在这社会,谁还那么傻啊,都POJO了,都不用ejb了,但是应用规模上来了之后,问题同样存在,只不过是比ejb好一些而已,同样规模的应用,换用spring/guice,同样需要初始化上千的各种bean,花费的时间照样客观,3分钟?5分钟?那也是时间啊,关键是你就修改一点点东西都得花这3,5分钟,往往 ...
前两天发表了一篇“javarebel原理分析”,直接被正主告状,导致文章被删除,看来同样的问题得换一个角度来描述   接下来的一段时间,我会将思路整理一下,陆续发表一些jvm 字节码分析和java的类重新装载的实现思路,呵呵,这下没问题了吧。
http://www.zeroturnaround.com/blog/javarebel-20-is-released-%E2%80%93-improves-upon-the-award-winning-10/ 刚刚新发布的2.0,有一些新的特性,干货如下: * 支持打包部署 * 启动性能提高 * 更好地性能 * Spring,Guice,Stripes,Tapestry4,Struts2天生支持 * 更好地兼容性  
去西城广场的路上,有一小片地方,像夜市,看到一块木板,上面写了广告“很多围巾”,旁边还有几个小字“男的也有“,老板很牛,很通俗西城广场在整修,从一条小路过去,边上有人在卖面人,就是用面加颜料,然后做出各种形状的那种,一位时髦的mm问:用什么做的阿?老板:面mm:能吃不?还有,总发现那巷子里算命的几个人中,有长胡子的那人生意最好!其他的人怎么不会思考呢?好歹整点假胡子啥的阿!
http://v.youku.com/v_show/id_XNTQwODg2MjA=.html

我的vim设定

syntax on " for color set tabstop=4 " 按tab时变成4个空格 set shiftwidth=4 " 4个空格缩进 set expandtab " 按tab 时使用空格 set softtabstop=4 " 将4个空格当作一个tab来处理
http://www.playframework.org/有的地方像rails,模板有点像django,看起来还挺简单的
http://www.springsource.com/g2oneGroovy/Grails 投入了spring的怀抱,继续关组grails/groovy
Day 11 Programming with Sockets • gen_tcp 和 gen_udp 两个包使用TCP • 从服务器取数据 • 1. {ok,Socket}=gen_tcp:connect(Host,Port,Params) • 2. ok = gen_tcp:send(Socket,Data). • 3.receive_data,处理两种包{tcp,Socket,Bin}和{tcp_closed,Socket}   receive_data(Socket, SoFar) ->       receive          {tcp,Socket,Bi ...
文件操作函数库的组织方式• file 模块,打开关闭,读写,列目录,等等基本操作• filename 模块,一致的处理不同平台上的文件名• filelib 模块,是file模块的一个扩充,大多是用file模块的函数编写• io 模块,提供一些函数来处理已打开的文件,比如分析文件内容,将格式化的数据写入文件等读取文件的不同方式• 文件内容都是由一些字节组成,这些内容是什么含义完全取决于怎么处理• 例如文件:{person, "joe" , "armstrong" ,        [{occupation, programmer},         {fav ...
• Erlang和外部程序的交互通过一种叫port的技术来通信,为了保证安全,外部进程的crash不会影响到erlang的vm本身• 具体过程是这样的• 1. 首先通过open_port来启动外部程序,并绑定一个erlang进程在这个port上• 2. 这个绑定的进程拥有所有和外部程序的接口,所有和外部程序的交互都通过他来走• 3. 绑定的进程和外部程序之间是通过二进制流来交互的Ports• Port = open_port(PortName, PortSettings)• PortName的格式可以为:• {spawn, Command}  启动外部程序Command• {fd, In, Ou ...
Distributed Programming为啥需要分布式的程序?• 性能,可以把程序的不同部分跑在不同的机器上• 可靠性,我们可以构建一种容错机制,如果一台机器挂了,可以把他的工作交给其他机器去完成• 伸缩性,如果向上扩展的话,再好的机器也有个头,但是我们可以向外扩展,添加新的机器进来提高计算能力这里会介绍两种分布式的实现方式• 1. 分布式的erlang,提供一种机制让erlang程序运行在一组服务器上,以前介绍的所有的消息机制,spawn等都可以一致的工作• 分布式的erlang程序应该工作在一个可以信任的环境里,因为任何程序都可以操作任何节点上的东西,一般分布式的erlang都是运行在 ...
Linking Processes• 进程可以调用link(Pid)来创建连接,连接之后,当一个进程死掉,另一个进程会收到一个exit的消息• 如果进程不处理这个exit消息,默认情况下也会退出• 这个连接工作在本地,也可以工作在多个节点上on_exit 处理器on_exit(Pid, Fun) ->    spawn(fun() ->      process_flag(trap_exit, true),      link(Pid),      receive          {'EXIT', Pid, Why} ->              Fun(Why)      ...
Global site tag (gtag.js) - Google Analytics