- 博客(32)
- 收藏
- 关注
原创 ibooking项目设计介绍(一个基于SSH的外卖点餐系统)
一、源码路径https://github.com/weiganyi/ibooking 二、界面通过浏览器访问web网站,可以看到界面如下: 三、背景这两年来O2O的概念越来越火热,O2O因为能够把线下的资源通过线上的信息沟通渠道进行连接,影响着很多实体行业未来的发展。这个项目就是为餐饮店提供线上外卖订餐服务的web网站,具有O2O网站的特点。网站有顾客和
2015-09-07 09:22:53
10101
3
原创 Hadoop学习总结
最近学习了hadoop这个框架,把自己的理解总结如下:1、hadoop通过一个jobtracker分派任务到一系列tasktracker来运行,tasktracker同时向jobtracker返回任务运行结果。jobtracker对作业的输入数据进行分片,然后为每个分片创建一个map任务,同时创建一定数量的reduce任务,并指派空闲的tasktracker来执行这些任务。tasktr
2015-04-13 10:12:02
6510
原创 关于SSH框架设计的一些理解
最近在学习企业开发领域很流行的SSH框架(Struts、Hibernate、Spring),由于之前有做过原生的Servlet+JSP的项目,所以在学习过程中我会跟原生开发模式进行对比,在这里我把自己的一些理解做下小结。1、Servlet+JSP原生开发先简要说一下Java Web原生开发模式,Java Web开发通常是使用Tomcat之类的容器,Tomcat容器实现了一套也可以称为框架的
2014-11-05 08:37:28
4353
6
原创 浅析Java语言慢的原因
Java在早期(比如JDK1.2以前)是很慢的,后续版本由于有许多优化手段的加入,Java正变得越来越快,所以现在也有很多关于Java和C/C++孰快孰慢的争论。我想就我自己的理解,谈一下影响Java程序运行速度的因素。1、 GC回收众所周知,Java相对C/C++的一个很大进步就是有了GC机制,它能够很大程序的避免C/C++常见的内存泄漏的发生。但是这也是有代价的,那就是因为JVM管理了
2014-07-07 08:44:06
4681
8
原创 dr-helper项目设计介绍(一个包含移动端和Web端的点餐管理系统)
一、源码路径https://github.com/weiganyi/dr-helper 二、界面通过浏览器访问Web服务,可以看到界面如下:ADT-Bundle编译工程生成dr-helper.apk,安装后可以看到应用界面如下: 三、背景Java诞生后主要就是用于Web开发,随着Android的兴起,其在移动领域也应用广泛。我在学习了Java相关的一系列
2014-06-16 08:58:59
4183
原创 Web页面布局方式小结
Web页面是由块元素组成的,正常情况下块元素一个个按垂直方向排布,构成了页面。但是这种基本的布局方式绝大多时候不能满足我们的需求,所以各种布局方式应运而生,本文就对这些布局方式做个小结。1、元素漂移把一个元素从页面流中移走,漂移到某个方向,其它块元素会置于这个元素下面,当有内联元素注入其他块元素时,内联元素会环绕着这个元素#amazing{ width: 200px;
2014-06-03 10:07:38
3626
1
原创 关于游戏手柄按键的设计
一、背景最近开发了一个空鼠遥控器的外设产品,采用Nordic51822 MCU芯片,基于BLE4.0标准,与OTT盒子连接,同时具有遥控器、空鼠、游戏手柄的功能。其中在按键的设计这块我们走了一些弯路,现总结一下经验教训,以供开发类似产品时参考。 二、初始设计1、结构设计最初按键在结构设计上采用类似路由器按键的方式,比较简单,在PCB按键位置放置一个波仔片,然后上面加一个橡胶的按
2014-05-04 09:21:54
7320
原创 浅谈Android系统开发中一些概念的理解
Android开发分为应用开发和系统开发,本文是《浅谈Android应用开发中一些概念的理解》的姊妹篇。Android系统基于Linux系统搭建,有其自己的特点,虽然系统开发技术通常只有ROM厂商或深度定制才需要,但对于应用开发人员来说,了解底层的一些实现,对于更好的应用Android应用框架来开发应用,是大有裨益的。下面总结一下我在Andriod系统开发学习过程中对一些概念的理解。1、a
2014-04-14 14:25:35
1701
2
原创 浅谈Android应用开发中一些概念的理解
Android应用、Window应用和Web应用这3种应用是我们目前比较主流的应用程序开发类型,其实他们之间的设计思路有许多相同的地方,也有不同的地方。在各种技术之间相互借鉴,有助于我们理解Android应用开发模式的一些设计思路。下面我总结一下在Android应用开发中我对一些概念的理解。1、开发Android应用程序时界面资源通过XML文件来定义,可以与Java源码分离,同时自动在R.ja
2014-04-09 10:06:17
2548
原创 六种主流编程语言(C、C++、Python、JavaScript、PHP、Java)特性对比
这些年来我陆陆续续已经学习了六种编程语言,有些人会说语言学到最后不都差不多吗?其实可以这样讲,也可以不这样讲。虽然每种语言的表达能力大部分是重合的,只是语法表现形式不一样,但是由于历史发展的原因,每种语言形成了自己的支撑环境,所以都有其主要的适用范围。 C、C++、Python和Java四种是通用编程语言,JavaScript和PHP算是Web环境的专用编程语言。C语言由于其底层操
2014-02-24 09:17:54
24278
17
原创 Java语言与C++语言的差异总结
Java的设计者曾说过,设计这门语言的灵感主要来自于C++。世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史。所以在Java语言学习过程中,将其与C++语言对比是一件有意义的事情。通过这些对比,我们能够了解到Java语言相对于C++语言有哪些改进,能带给我们哪些进步,这样对于更加深入理解这两种语言是大有裨益的。 下面我总结一下Java语言与C++语言
2014-01-20 09:30:09
6279
23
原创 tiny-blog项目设计介绍(一个基于LAMP架构的轻量级博客系统)
一、源码路径https://github.com/weiganyi/tiny-blog 二、界面把项目代码放到Web服务器路径下某个目录,通过浏览器访问这个目录可以看到如下界面: 三、背景最近学习了LAMP架构开发,想找个东西来练练手,博客程序是一个比较好的选择,大小适中,通过它能够验证许多Web网站的基本功能。按照LAMP架构,基于Apache服务器的PH
2013-12-24 17:31:04
3900
原创 Web页面向后台提交数据的方式和选择
众所周知Web前端页面主要由HTML/CSS/Javascript组成,当要通过与用户的交互实现各种功能时,就需要向后台提交一些数据或者操作。在Web世界里各种实现眼花缭乱,但究其根本,不外乎三种方式,这也是由前端脚本、浏览器与后台交互规则决定的。1、通过表单提交这是HTML支持最传统的提交方法,需要创建表单,然后表单包含各种类型的表单元素,还要有一个提交按钮,通过提交按钮来提交到后台,这
2013-12-18 14:04:29
6998
1
原创 mini-editor项目设计介绍(一个基于Javascript的Web编辑器)
一、源码路径https://github.com/weiganyi/mini-editor 二、背景网上有许多开源的Web编辑器项目可以方便我们使用,但是它们的功能通常都比较丰富,体积也较大,并且很多功能通常都用不到,所以我萌生了做一个轻量级Web编辑器的想法。Web编辑器的使用环境决定了要使用Javascript来实现,有些开源项目需要前后台代码来配合完成功能,我考虑到编辑器
2013-11-22 11:46:41
3826
2
原创 WordPress源码设计解读
WordPress是一个比较流行的博客CMS,并且不依赖于第三方框架。最近我阅读了它的源码,大体了解了它的整体设计实现,下面我做一些总结。我选取的是2.0版本,虽然比较旧,但总体代码量会少一些,也不会影响对整体流程的了解。 一、原理WordPress是一个CMS,区别于博客的是它带有博客管理功能,方便使用者发布和管理他的博客文章。它整个是基于PHP语言的,当用户通过浏览器访问WordP
2013-11-07 15:10:21
3924
原创 jphone项目设计介绍(一个基于C++的应用程序框架以及软电话和日志服务器应用)
一、源码路径https://github.com/weiganyi/jphone 二、背景最开始做这个项目的时候,是由于发现了一个叫PjSIP的开源SIP协议栈,实现上要比OSIP成熟许多,用它来开发SIP应用也更简单方便,我就考虑基于PjSIP来做一个SIP软电话原型。我选择用C++语言来实现,原因是我想要在这个项目中实现一些通用机制,C++语言比那些解释语言更适于底层开发,
2013-10-09 16:30:35
2763
原创 iad-simulator项目设计介绍(一个基于Python的IAD终端模拟器)
一、源码路径https://github.com/weiganyi/iad-simulator 二、背景我在工作中有时会要拿我们的IAD产品去对接一些异常SIP报文,通常是用一些UDP发包工具(如UDP Test Tool)来模拟给IAD发SIP异常报文。这种方法一方面没办法把SIP信令流程串起来,因为SIP发送和接收消息的一些字段有依赖关系,另一方面定制过的消息没法保存下来供下次
2013-10-01 06:14:42
2389
1
原创 浅析嵌入式Linux系统的构成和启动过程
在我们的周围,大量的嵌入式设备都是基于Linux系统来构建的,嵌入式Linux与主机Linux相比有着自己的一些特点,本文就嵌入式Linux系统的构成和启动过程做一些总结。 一、嵌入式Linux系统构成上图是一个嵌入式Linux系统的典型结构,划分成了4个区:1、Bootloader区存放的是Bootloader,它负责嵌入式系统最初的硬件初始化、驱动和内核加载。2、参
2013-09-11 14:08:19
6907
1
原创 ACE框架解读 - 特性篇
ACE是一个很著名的网络服务开发框架,最近学习它,发现里面有一些框架特有的概念,下面我就对这些概念的理解做一下总结。 1、网络接口的C++包装通过给网络编程API进行外观模式的封装,向用户提供简单的网络接口对象,简化用户编程。 2、OS并发机制的OO封装封装了操作系统的锁对象,并且通过智能指针把锁对象封装起来,以实现在函数任意地方退出时的锁对象自动释放。
2013-09-07 18:04:24
3182
原创 ACE框架解读 - 源码篇
最近学习ACE框架的源码,先考虑选取最新版本ACE6.0来阅读,但是发现代码量有30多万行,规模太大了花的时间会比较多,所以考虑选取旧一些的版本,最后选取ACE4.5版本来阅读,代码量13万行比较适中。下面是我学习时的一些总结,把所有的目录和文件列出来,并针对每个文件里的主要类及其实现,根据自己的理解作了一些总结。文件总结[CORBA]
2013-09-07 10:07:53
7008
原创 《重构》读书总结
前段时间我学习了《重构》这本书,在学习过程中,我就每个重构方法的目的就自己的理解做了一些总结,如下:1 重新组织函数1.1 提炼函数(Extract Method)解释:如果一个函数过于复杂,就把它拆分为多个职责清晰的小函数。目的:1、复杂的函数难于理解。2、拆分成小函数后能够提高小函数的复用度。1.2 内联函数(Inline Method)解释:如果
2013-09-05 15:37:53
1876
2
原创 高并发软件设计的几种方式
本文就高并发软件设计中可以考虑使用的一些方法做如下总结: 1)多线程有利于提高CPU占用率,因为软件本身的线程越多,在和系统上其他线程争夺CPU资源时就能分配到更多执行资源,同时也能提高业务处理的并发性。 2)非阻塞IO能够在IO操作条件不成熟时不阻塞在IO调用处,返回继续其他代码的执行,过一阵再进行IO尝试。异步IO能在IO操作执行时不阻塞在IO调用处,返回继续其他代码的执行,等IO操作
2013-09-05 15:29:48
3481
原创 模块间通信时对象序列化方式比较
软件主要是由一个个的模块,以及模块间的通信组成的。不论哪种模块间通信方式,其底层承载的都是码流形式的数据。因此,模块间通信其中一个重要工作是把模块中的数据对象序列化成码流,然后发送到其他模块,再反序列化还原成数据对象,以此完成通信过程。 对象的序列化方式主要有以下两种代表类型:1、XML格式序列化优点:消息可读性好,可以在不同平台间通信,方便实现者做各种扩展增强,适用于信息较复杂的
2013-09-05 15:29:05
1484
原创 TCP与UDP各自特点对比
UDP和TCP是我们最常用的两种通信方式,下面就两者之间的特点做一个对比: 1、UDP主要用在实时性要求高以及对质量相对较弱的地方,如流媒体。 2、TCP既然是面向连接的,那么运行环境必然要求其保证可靠性,具有不可丢包、有良好的拥塞控制机制,如http ftp telnet。 3、TCP容易阻塞,UDP容易丢包。 4、TCP是保证质量不保证速度,UDP保证速度但不保证质量。 5
2013-09-05 15:28:28
5663
原创 软件设计中的同步异步单线程多线程优缺点分析
同步还是异步,单线程还是多线程是我们软件开发中经常面临的设计选择,只有准确的区分它们之间的优缺点,才能根据我们的实际应用场景作出正确选择。它们两两组合一共有四种模式,下面就我自己的理解做一些总结分析。 1、同步单线程模式优点:a)实现简单。b)不用考虑线程间同步互斥问题。缺点:a)对CPU的使用率不高(容易在进行IO操作或自身等待操作时阻塞),在多CPU时劣势更明显。b)并发性不好,在
2013-09-05 15:22:15
6166
原创 Malloc函数的线程安全与可重入性分析
malloc函数是一个我们经常使用的函数,如果不对会造成一些潜在的问题。下面就malloc函数的线程安全性和可重入性做一些分析。 我们知道一个函数要做到线程安全,需要解决多个线程调用函数时访问共享资源的冲突。而一个函数要做到可重入,需要不在函数内部使用静态或全局数据,不返回静态或全局数据,也不调用不可重入函数。 malloc函数线程安全但是不可重入的,因为malloc函数在用户空间要自己管
2013-09-05 15:18:34
24093
原创 Linux进程调度与内核抢占总结
Linux2.6以后支持内核抢占,在开发过程中内核抢占经常会造成一些竞态问题,分析起来比较麻烦,所以有必要总结一下触发抢占的因素和时机。 一、触发抢占的因素1、进程调用sleep或exit等函数进行状态切换,这些函数通过系统调用进入内核会主动调用schedule。2、在时钟中断处理程序检查到进程时间片用完,置位need_resched。3、在中断处理程序或者系统调用中主动调用sch
2013-09-05 15:17:39
1456
原创 Linux进程上下文和中断上下文总结
在Linux系统下,CPU总是处于下面三种状态之一:1、内核态,运行进程上下文。2、内核态,运行于中断上下文。3、用户态,运行进程上下文。 进程上下文和中断上下文是Linux系统一个比较重要的概念,下面从程序的角度总结一下各属于哪种上下文:1、中断处理程序处于中断上下文。2、异常处理程序通常从用户空间的进程发起,处于进程上下文,可以切换到其他进程。3、软中断(sof
2013-09-05 15:17:13
3361
2
原创 C语言系统自己管理内存分配的好处
C语言系统没有内置的内存管理机制,通常是在需要使用内存的时候,动态的通过malloc在堆空间申请内存。这种做法有一定的缺陷,在较大的系统中往往会自己做内存分配管理,我想原因大致如下: 1)内存申请操作是比较耗时的,所以可以通过把预先申请的内存划分为桶,运行时需要内存时从桶中申请,使得申请速度加快。 2)有时申请内存是不希望失败的,由于运行时所需要的内存都已经预先申请了,保证了运行时
2013-09-05 15:12:31
1746
原创 C语言系统内存被踩情况总结
C语言由于可以直接操作内存,给我们的编程带来了便利,同时也带来了内存写越界之类的问题,常常造成我们的系统crash。下面总结了我在工作中碰到的导致内存越界的各种场景,以供分析此类问题时作个参考。 1、直接写越界,包括1)栈空间变量写越界覆盖掉函数返回地址,导致函数返回时crash。2)全局变量写越界,导致覆盖掉符号表中排在这个全局变量后面的全局变量的值。 2、未初始化指针变量的值写
2013-09-05 15:10:26
9806
原创 一种在Windows资源管理器添加右键菜单命令来打开选定目录DOS窗口的方法
我们在用windows时经常需要在某个目录下执行执行一些dos命令,通常我们会在开始菜单的运行下键入:cmd,开启dos命令窗口,然后在cd到目标操作目录,每次这样操作比较麻烦。下面介绍一种直接在资源管理器选定目标目录打开dos命令窗口的小办法。 步骤如下:1、打开regedit2、搜索Folder,只搜索项,全字匹配3、找到后,在子目录shell下新建一个项“DosHere”
2013-09-05 15:09:18
3496
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人