自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

孜风的专栏

程序&音箱

  • 博客(63)
  • 资源 (3)
  • 收藏
  • 关注

原创 kotlin native没有预想中的那么美好

原文 kotlin native没有预想中的那么美好kotlin native的横空出世,给很多人(包括我)以美好的幻想:有一个美好的语言,能代替c了。确实是可以,但是要看情况。客户端应用开发,用kotlin应该没问题。服务器开发,如果是CPU BOUND的应用的话,恐怕要让你失望了。

2017-07-01 12:39:48 2691

原创 在 mac os 上运行 kotlin native 的第一个程序:hello world

原文链接:在 mac os 上运行 kotlin native 的第一个程序:hello world背景  不久前有群友在讨论kotlin,就翻看了聊天记录,发现了kotlin native,能把kotin代码编译成本地可执行文件。就到kotlin的官方网站看了一下。觉得kotlin native确实很有潜力,能够零开销调用c代码,这比JNI要好很多。也许能把kot

2017-06-21 09:56:05 5508

原创 java中把UTC时间戳(System.currentTimeMillis())转化为代表日期的整数

原文:java中把UTC时间戳(System.currentTimeMillis())转化为代表日期的整数背景在向数据库中存储日期时,很多时候习惯于存储一个整数,也就是java里的System.currentTimeMillis(),这个数字精确到了毫秒级。如果我们不想要这么精确呢,比如只想精确到小时、日期等等。利用Calendar可以轻松达到这个目的。方法

2017-06-20 22:09:22 9818

原创 解决跨域访问时的session保持问题

查看原文:解决跨域访问时的session保持问题关于这个问题我曾经写过一篇文章,用了一种类似“会话”的东西来保持会话。昨天在我加评论功能的时候,需要有验证码校验,防止有人用机器人发评论,突然发现会话在服务器端需要能够存储一些会话相关的数据。按照我当前的做法,需要实现一套完整的session机制,这个工作就比较繁琐了。于是想用cookie搭配url参数来解决,在实验过程中,发现ajax跨

2017-06-20 17:51:59 1639

原创 VisualStudioForMac离线安装方法

搜索xamarin的时候 ,发现微软发布了VS for mac,注意:这不是VS code。于是就想尝尝鲜。点击下载社区版,25M左右,双击安装,提示无法连接网络。试了几次都是如此。网上搜索离线安装包,也没找到。只有一个教离线安装的网页,只是不明白那个离线安装的说明页从哪里弹出来的。经过几次尝试,终于找到了官方的手动安装手册。原文链接

2017-06-20 17:46:50 5424

原创 自己写的博客系统,分享给大家

零点博客着眼于轻便,针对于个人,力求做到易于使用。所以,只要写过网页的人,应该都能使用。

2017-04-25 13:15:00 3480

原创 [unity]unity 2d draw call优化

使用unity将近一年,开发了一款2d游戏,一直忙于学习、开发功能,没有关注过性能。上周无意看了一下战斗场景,发现draw call的数量是38,直觉觉得有点高,于是开始了优化工作。

2016-07-16 22:11:07 1357

原创 抽象单例:一种通用的单例

背景单例的一般写法,大家基本都会,这里特指具有以下特征的单例: 1.单例 2.需要延迟加载 3.线程安全 看一下这个类的写法(JAVA):public class A { private static final AtomicReference<A> ref = new AtomicReference<>(); private A() { } public sta

2016-03-04 17:19:14 3560

原创 [NIO]从300万到700万——dawn的协程优化

dawn的协程库,使用的是kilim,不过已经远非kilim的原有代码,主要保留了协程的两个基本原语,再往上层,已经全部被替换了。协程库,我学习过boost asio中的协程,也在我的机器上测试过单纯上下文切换的速度。这个速度在不同的机器之间没有可比性,因为彼此的cpu可能不同。但是在同一台机器上的不同库的对比,具有一定的参照性。我记得,当时asio协程单线程情况下,协程切

2015-07-03 21:29:21 1226 1

原创 [NIO]用dawn发送接收HTTP请求

HTTP协议的下层使用的是tcp,所以我们建立一个tcp连接就能发送接收http请求。dawn底层使用了nio,但是经过dawn的封装之后,我们在编写代码的时候,就和使用普通的阻塞式socket一样,不需要关注nio的api。可以把我们的精力放在业务逻辑的处理上。举例如下,下例的功能就是取回baidu首页:package zhmt.dawn.nio;import java.nio.

2015-07-01 06:39:03 1248

原创 【NIO】dawn中buffer的使用

在网络编程中,buffer是用来把应用程序的数据发送到网络上的中转站,它的重要行不言而喻。提到buffer就不能不说零拷贝什么的,buffer的内存管理什么的,在dawn中,基于directbuffer重新实现了一个可以自动扩展的零拷贝buffer。它的原理就是一个内存块的链表,数据都是在尾端添加,从头部移出,或者在中间获取、设置。所有的位置信息都是直接通过计算获取,所以,保证了各种情况的存取效率

2015-06-30 06:40:08 935 1

原创 [NIO]dawn之Task详解

在上篇文章中,我们设置好了开发环境,接下来,我们将在了解了Task以及Buffer之后,再开始了解网络编程。我们首先来看看Taskpackage zhmt.dawn;import kilim.Pausable;import kilim.Scheduler;import kilim.Task;//继承kilim.Taskpublic class HelloWorld ext

2015-06-28 09:28:39 840

原创 [nio]dawn开发环境配置

为什么dawn需要特殊的开发配置?dawn使用的是kilim协程,在编码结束后需要进行代码织入。试想,如果每次写完程序,运行代码之前都手工运行一次织入程序,是多么蛋疼的一件事情。更糟糕的是,如果你没掌握织入的技巧,可能就失去了在eclipse调试java代码的机会,开发效率会大大降低。所以,我们可以编写一段ant脚本,让eclipse帮我们自动完成织入。步骤我们就拿dawn这个项目做为

2015-06-27 06:35:45 1190

原创 [nio]dawn的基本概念

1.dawn是单线程的:为什么单线程?现实中很多程序都是单线程的,比如redis,memcache,nodejs,mmorpg服务器。。。。。。采用单线程有两大好处,首先,不需要使用锁,逻辑更容易理解,不易出错,其次,减少了切换线程时的调度成本。2.什么是Taskdawn中使用了Task,这其实是kilim中的协程,协程最基本的功能是挂起和恢复,这点和线程是一致的。所有的Tas

2015-06-26 07:58:33 989

原创 【NIO】更简单的nio使用方式

接触nio也有好几年了,最开始摸不着头脑,资料很少,网上的资料都是翻来覆去的抄袭,基本上对于自己的学习没有大帮助。后来遇到了xsocket,觉得用起来还可以,挺方便,api也很简洁。不过这个库的用户不多,后来作者也停止了开发。然后就是mina netty,这些不用说,了解nio的人都知道它们。不过想用好它们也不是那么容易。里面有各种回调,各种future,当你在处理网络事件

2015-06-22 20:47:26 3986 4

原创 [dlang]d语言开发环境安装:centos 7 下安装 mono-d

linux下的mono-d,有代码提示、debug,使用起来很方便,以下简洁安装过程:1.导入mono源 rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"yum-config-manager --add-

2015-04-28 14:01:12 2588

原创 [dlang](4)自定义的mysql orm工具

原本orm使用的hibernated,不知什么原因,一个周后,代码突然不能正常运行,自己查了半天,没解决。到dlang官方论坛,以及hibernated的官方,都没找到解决办法。无奈只能退回到使用mysql的客户端。但是现在处于开发初期,表结构的改变非常频繁,每次修改类、数据库,sql语句,想想都觉得太麻烦,自动动手,写了一个简单的orm工具;现在只支持从类生成表,修改类定义后自动修改

2015-02-12 15:20:51 1247 2

原创 [dlang](三)具有相同属性的不同类之间的拷贝

此段代码可以用于以下情形:两个对象的类名不同,但是内部字段名称相同,可以用以下函数进行浅拷贝。在类很多的时候,省事不少。void copyObj(SRC,DEST)(ref SRC src,ref DEST dest){    foreach (i, type; typeof(SRC.tupleof)) {        __traits(getMember, dest

2015-01-29 07:36:51 1128

原创 [dlang](二)用vibe.d+thrift做网络编程

关于vibe.d的socket开发的例子微乎其微,我是看着API文档一点一点写的, 我这里抛砖引玉,方便后来者。而d语言版本的thrift也和其它语言版本的有很大的不同,其中很明显的不同是,它生成的类并不继承于TBase,所以最开始我想写一个通用的序列化、反序列化函数的时候无从下手。但是我发现其中细节,就是生成的类不包含read write方法,但是可以调用,个中原因我还没搞明白,随着我对D的深入学习,以后再弄明白原因吧。但是这启发我尝试了一下泛型编程,如我所料的成了。

2015-01-28 23:17:55 1454

原创 [dlang](一)利用dub搭建vibe.d,hibernated,mysql开发环境

最近刚开始学习d的开发,D是一门系统开发语言,每一个程序员都应该学会一门系统开发语言。我之所以选择D,是因为我主要做服务器开发,应用开发,D有很高的开发效率。同时,服务器会要求有较高的执行效率,而D的另外一个优势就是编译后的二进制文件直接兼容C C++,所以调用C C++的开销基本可以忽略不计。最后一个很有吸引力的优势是:利用D,你可以选择使用GC,也可以绕过GC自己进行内存分配,也可以让一部分大对象不使用GC,而另外一部分生命周期较短的常用对象使用GC(如字符串),这样可以兼顾开发效率以及降低GC开销。

2015-01-28 23:14:23 2870 1

原创 JAVA实现的异步redis客户端

一个不一样的redis客户端,更注重吞吐量。

2014-06-05 07:51:37 8125 4

原创 log4j2 文件滚动扩展(基于行和时间的滚动)

目标:实现基于行和时间间隔的文件滚动。注:不是纯粹的行,而是log的次数,如果log一次是一行,就是行数(我log一次就是一行)。例如:单个文件超过10行滚动文件,如果超过10秒还不到10行,也滚动文件。mysql默认的组合策略达不到这个目标,他是两种策略的“或”,单一的行数到达限制,或者单一的时间间隔到达限制,都会滚动。在滚动后,两个策略单独重置,而不是一起都重置。

2013-05-09 10:43:17 8894

原创 更简单的框架(2)-Servlet的处理

 在以前,如果别人让我帮他做个网站之类的,我一般不乐意。为什么?工作量大,就比如写个servlet,无论你用javax.servlet.HttpServlet还是用structs等框架来编写,都不轻松。用servlet吧,参数解析,繁重的编码量会搞得自己很郁闷。那好,用struts,用了struts以后好多了,参数直接给你映射到javabean里了,而且你也可以直接指定调用actionProces

2008-04-03 14:38:00 2716 2

原创 更简单的框架

当亲朋好友让自己帮他们开发小型的web应用的时候,才发现自己的开发速度还不够快,手边所有的框架都显得那么的笨重,开发一个模块,你需要一堆的配置,重复n多的工作,还要面对众多未知的标签,很明显速度上不去啊.要是做单位的那种按部就班的正规开发还可以,但是,要你几天出一个好几个模块的东西,马上就感觉到了编码工作量庞大.怎样才能减少这种工作量,很值得我们思考.采用现在的框架,并不能把我的工作量

2008-02-02 17:50:00 893 1

原创 Ibatis 映射文件自动生成器

使用了一个多月的iBatis,大体觉得挺不错.速度灵活性都还可以.比起以前的完全手动编程,节约了大量的时间.但是,随着使用次数的增多,一个问题很快就暴露出来,那就是映射文件写起来太烦了,都是重复单调的打字.于是就写了一个小程序,来做这个映射的工作.先说一下原理:iBatis中的映射是很有规律的,最重要的是做好数据库字段到javabean属性的映射,而其他的地方改动很少. 这就好办了,我们采

2008-01-29 17:06:00 1649

原创 共享上网 网络故障的排除(终结篇)

这段时间接别人的共享宽带上网老不稳定,时时掉线。掉线后不能ping网关。重新做了两个水晶头,不行。但是发现能介绍网关发的arp包。猜想硬件应该没问题。 然后找了一个arp工具,能够扫到别人的电脑。进一步确定硬件的问题不大。猜想是本机tcp协议被破坏,从别人那下载一个tcp修复工具,copy过来,运行,修复。重新启动电脑。打开ie,ok连接恢复了。

2007-11-29 09:11:00 622

原创 日记服务器

 class LogParam...{    public:        string* bufdata;        Queue *tasks;};class LogServer...{    public:        void startServer();        LogServer(char _ip[],int _port);        ~LogServer(); 

2007-08-30 17:24:00 670

转载 Java 理论与实践: 非阻塞算法简介

看吧,没有锁定!

2007-06-08 10:03:00 722

转载 Java 理论与实践: 流行的原子

新原子类是 java.util.concurrent 的隐藏精华

2007-06-08 10:01:00 694

转载 追求代码质量: 驯服复杂的冗长代码

测量代码是否冗长的工具和度量

2007-06-08 09:54:00 1717

转载 追求代码质量: 用代码度量进行重构

用代码度量和提取方法模式进行目的明确的重构

2007-06-08 09:52:00 875

转载 追求代码质量: 用 JUnitPerf 进行性能测试

监控可伸缩性和性能的两个简单测试

2007-06-08 09:52:00 648

转载 追求代码质量: 软件架构的代码质量

使用耦合度量来支持系统架构

2007-06-08 09:51:00 746

转载 性能管理 ― 您有规划吗?知道何时优化比知道如何优化更重要

性能问题从何而来?导致性能问题的编程选项有许多类型 ― 效率低的算法、冗余计算、糟糕的资源分配和使用情况、过多的同步,或者很明显就是效率低的设计。但更普遍的且具有破坏性的要属管理和方法错误,而不是编程错误。在这一部分的 Java 理论与实践中,Brian Goetz 将讨论在项目中使用 Java 语言时遇到的一些最常见的性能错误。在附带的 论坛中与作者和其他读者分享您关于本文的心得。(您也可以通过

2007-06-07 12:13:00 855

转载 关于异常的争论

关于在 Java 语言中使用异常的大多数建议都认为,在确信异常可以被捕获的任何情况下,应该优先使用检查型异常。语言设计(编译器强制您在方法签名中列出可能被抛出的所有检查型异常)以及早期关于样式和用法的著作都支持该建议。最近,几位著名的作者已经开始认为非检查型异常在优秀的 Java 类设计中有着比以前所认为的更为重要的地位。在本文中,Brian Goetz 考察了关于使用非检查型异常的优缺点。请在附

2007-06-07 12:11:00 706

转载 弱引用

虽然用 Java™ 语言编写的程序在理论上是不会出现“内存泄漏”的,但是有时对象在不再作为程序的逻辑状态的一部分之后仍然不被垃圾收集。本月,负责保障应用程序健康的工程师 Brian Goetz 探讨了无意识的对象保留的常见原因,并展示了如何用弱引用堵住泄漏。 要让垃圾收集(GC)回收程序不再使用的对象,对象的逻辑 生命周期(应用程序使用它的时间)和对该对象拥有的引用的实际 生命周期必须是相同的

2007-06-07 11:28:00 842

原创 MYSQL学习笔记(5)配置:使用选项文件

4.3.2. 使用选项文件MySQL程序可以从选项文件(有时也称为配置文件)读取启动选项。选项文件提供了一种很方便的方式来指定常用的选项,因此不需要每次运行程序时从命令行输入。下面的程序支持选项文件:myisamchk、myisampack、mysql、mysql.server、mysqladmin、mysqlbinlog、mysqlcc、mysqlcheck、

2007-06-07 09:46:00 819

原创 MYSQL学习笔记(4)常用查询的例子

下面是一些学习如何用MySQL解决一些常见问题的例子。在一些例子中,使用数据库表“shop”来储存某个商人(经销商)的每件物品(物品号)的价格。假定每个商人对每项物品有一个固定价格,那么(物品,商人)即为该记录的主关键字。启动命令行工具mysql并选择数据库:shell> mysql your-database-name(在大多数MySQL中,你可以使用test数据库)。你可以

2007-06-06 10:16:00 692

原创 MYSQL学习笔记(3)COUNT函数

数据库经常用于回答这个问题,“某个类型的数据在表中出现的频度?”例如,你可能想要知道你有多少宠物,或每位主人有多少宠物,或你可能想要对你的动物进行各种类型的普查。计算你拥有动物的总数目与“在pet表中有多少行?”是同样的问题,因为每个宠物有一个记录。COUNT(*)函数计算行数,所以计算动物数目的查询应为:mysql> SELECT COUNT(*) FROM pet;+-------

2007-06-06 09:33:00 1721

原创 MYSQL学习笔记(2)模式匹配

MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。要想找出以“b”开头的名字:

2007-06-06 09:18:00 813

aph_hk__thailand__and_india___sprites

aph_hk__thailand__and_india___sprites,zhe shi ge tileset

2018-05-17

Ibatis 映射文件自动生成器

功能:当你建立好数据库,写好javabean,就可以用这个工具来为你的javabean和数据库之间做一个映射.<br>当然这个映射只是一个大致的模板,很多时候你可能要稍做修改.但是也为你节约了很多的时间.<br><br>使用方法:<br>1.修改beans.txt文件:这里是你的javabean的列表,一行一个.程序会读这个配置文件,来获取要做映射的类.<br>2.把你的jar包拷贝到本目录底下.<br>3.修改run.cmd文件,把你的jar包加入到classpath中.<br>4.执行run.cmd,会在out中得到映射文件.<br><br>作为示例,你下载完成后,直接执行run.cmd就可以在out目录中看到输出的映射文件.<br><br>author: zhmtzhmt@tom.com

2008-01-29

java反编译jad1.58

最新的反编译引擎jad1.58.............................

2007-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除