Hot For Coding
C释放内存的一点技巧

C语言语法虽然简单,但没有GC,内存需要手动控制。这就造成一个结果,程序员素质不高,软件就会被写的特别烂,程序员要牛逼,软件的表现力会比有GC的效果要好。

在C语言里要申请内存需要使用malloc()函数,反之释放内存使用free()函数,但是如果要释放时,请不要简单的仅仅使用free,如以下例子

#include <stdlib.h>
int main ()
{
  int * buffer;
  buffer = (int*) malloc (100 * sizeof(int));

  free(buffer);

  // 此时,虽然free了,但buffer还是指向原来的内存地址
  // 如果你不留意,后边使用了buffer做操作,那么程序很大几率会崩溃

  return 0;
}

...

READ ALL

Java枚举值转字符串数组

在Java中定义了一个类似这样的枚举值

public enum Arrow {
  LEFT,
  TOP,
  BOTTOM,
  RIGHT;
}

如果想要把Arrow转换成字符串数组,可以遍历这个枚举并使用name方法获取枚举值转字符串的方式

public static String[] names() {
  Arrow[] arrows = values();
  String[] names = new String[arrows.length];

  for (int i = 0; i < arrows.length; i++) {
    names[i] = arrows[i].name();
  }

  return names;
}

...

READ ALL

JavaScript私有变量

如果接触过其它语言的,应该会接触过私有变量这一个概念。所谓私有就是没有受保护,不能修改与访问,只能通过对外接口访问与修改。但是在JavaScript中并没有私有变量这个概念,所有成员都可以通过下标访问与修改,如:

var F = function () {};
 
F.prototype.name = 'zhangsan';
 
var a = new F();
 
console.log(a.name); // zhangsan
 
a.name = 'lisi';

console.log(a.name); // lisi

...

READ ALL

DOM API querySelector与querySelectorAll的用法

HTML5引入了与jQuery选择器相似的DOM API querySelectorAll(), 这个API用起来比那个getElement**好多了!废话不多说,直接上实例。

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <div class="box"></div>

    <div class="box">
      <p id="lost"></p>
      <p name="qttc"></p>
    </div>        

    <div></div>

    <div></div>

    <div class="box"></div>
  </body>
</html>

...

READ ALL

网页加载完后动态更换favicon.ico图标

最近遇到一个需求:网页加载完后动态更换favicon.ico,因为这个favicon.ico是用户动态通过页面上传的并且网页还不能刷新,这不是一个容易实现的需求,因为浏览器的兼容性。根据我当时的初步判断,这个需求应该没有什么难度,只要获取新的地址之后把link的href地址给替换就好!

事实证明并非那么简单就能搞定,后来经过我实践发现这里有浏览器兼容的问题,先给大家看一段示例代码:

favicon.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <link rel="shortcut icon" href="favicon1.ico" />
  </head>
  <body>
    <p>默认指定favicon1.ico,然后中途使用js更换为favicon2.ico</p>

    <script type="text/javascript">
          
      var changeIcon = function () {    
        var link = document.head.querySelector("link");
        link.href = "favicon2.ico";
      };
    
      changeIcon();
    </script>
  </body>
</html>

...

READ ALL

给Ckeditor添加一个插入code标签的按钮

Ckeditor是一个非常受欢迎的JavaScript编辑器,问世至今走了十年,依然还是市场老大,经得起时间考验就是好程序。

因为经常写一些技术博文,可能有些地方需要插入code标签,而默认Ckeditor不具备插入code标签功能,但它提供的拓展灵活程度让我感觉这就是那么容易。

下载程序

下载地址:http://ckeditor.com/

创建插件目录

目录plugins就是Ckeditor插件目录,所有的插件都集合在里边,在里边创建一个code目录,作为插入code标签功能的插件目录。

编写插件程序

Ckditor插件的规则是在插件目录下创建一个plugin.js文件作为插件主程序处理文件,如果是复杂的插件可能会有N个js文件。

...

READ ALL

CentOS yum 提示段错误 (core dumped)

今天在yum install或者yum update的时候都提示段错误(core dumped),然后终止运行了。

[root@lee ~]# yum -y update
Loaded plugins: fastestmirror, refresh-packagekit
Determining fastest mirrors
 * base: mirror.esocc.com
 * extras: mirror.esocc.com
 * soluslabs: mirror.us1.soluslabs.net
 * updates: mirror.esocc.com
base                                                                                                                                           | 3.7 kB     00:00     
base/primary_db                                                                                                                                | 4.4 MB     00:14     
extras                                                                                                                                         | 3.4 kB     00:00     
extras/primary_db                                                                                                                              |  18 kB     00:00     
soluslabs                                                                                                                                      |  951 B     00:00     
soluslabs/primary                                                                                                                              |  11 kB     00:00     
段错误 (core dumped)

...

READ ALL

读TCP/IP网络编程几点纪要

由于不是科班出身,所以对计算机网络基础知识匮乏,只能通过读一些书来弥补盲点,以下是读完此书的一些摘要总结

关于以太网

这个是很早的时候玩电脑总是发现有一个名词:以太网,但是个什么东西不太清楚,正好通过此书得解,它是一种计算机局域网技术,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是目前应用最普遍的局域网技术。

IP协议

IP(Internet Protocol)协议是TCP/IP协议族的核心组成部分,是目前应用最广的网络互联协议。IP层对应于ISO/OSI七层参考模型中的网络层。通过IP数据包和IP地址屏蔽掉了不同的物理网络(如以太网、令牌环网等)的帧格式、地址格式等各种底层物理网络细节,使得各种物理网络的差异性对上层协议不复存在,从而使网络互联成为可能

...

READ ALL

Supervisor守护Python进程

使用Python socket + HTML5 WebSocket写一个Web聊天室,上线使用时经常进程经常挂掉,然后手动重启进程,大家重新进入聊天室继续聊。时间长了以后,发现这样不是没有根本解决办法,因为每天聊天室的进程可能会因为各种原因挂掉。

Supervisor

Supervisor的出现,结束了我这苦恼的问题,它可以帮你守护任何进程,守护的意思是如果你的进程死了,会重新帮你起服务,确保你的服务一直可用。当然如果它的进程也挂了就全都over了。实际情况是上线三个多月运行非常好,没有发现服务断过。

CentOS下安装Supervisor

...

READ ALL

用QUnit单元测试开发你的程序

关于单元测试

单元测试是保障程序按照预期逻辑执行的一种测试方式,现在也逐渐被应用到前端项目。我刚开始写JavaScript的时候每次测试都要启动浏览器调用一下需要测试的代码,甚至还需要模拟一些数据来达到效果,最后这些测试的代码片段会被删除。但是bug出现的时候不得不在页面中重新写测试代码,非常费时。

事实上单元测试已经非常的成熟,包括赫赫有名的YUI test,今天我们介绍jQuery团队开发的QUnit单元测试框架,目前jQuery的测试正是使用这个单元测试框架,如果感兴趣可以到github上看看jQuery的test内容

准备

QUnit框架实际上就是一个JavaScript文件还有一个css文件,从官网http://qunitjs.com/下载引用或者直接使用cdn镜像

...

READ ALL