zh_harry
- 浏览: 91147 次
- 性别:
- 来自: 北京
-
博客专栏
-
自己动手写java 框架
浏览量:24951
社区版块
- ( 0)
- ( 12)
- ( 0)
最新评论
-
zh_harry:
线上demo已经上线http://www.sparrowzoo ...
高性能轻量级markdown 解析器java 版sparrow-markdown -
zh_harry:
sp42 写道演示地址 本地的? 代码 git clone 下 ...
自己动手写mvc框架sparrow mvc -
sp42:
非常不错 赞一个
高性能轻量级markdown 解析器java 版sparrow-markdown -
sp42:
演示地址 本地的?
自己动手写mvc框架sparrow mvc -
sp42:
我的框架也是用原生写,已弃坑。还是 mvvm 的爽,推荐 vu ...
sparrow-js 从0开始写 0依赖,原生js框架
文章列表
零基础暖心计划课程内容
https://sparrowzoo.feishu.cn/drive/folder/fldcnq4hsou8vzzxav5j0r97twg
原型
https://mastergo.com/file/72419140498526?page_id=46:74
事件风暴
https://miro.com/app/board/uxjvorn6ctc=/?share_link_id=989415167402启动sparrow-passport1. clone sparrow-bomhttps://github.com/sparrowzoo/ ...
麻雀虽小,但五脏俱全
sparrow 源自中国俗语 麻雀虽小,但五脏俱全,全力打造一个全新的低耦合,0依赖的高性能java基础框架。
有没有发现我们的工程代码其实很臃肿?
有没有发现我们依赖了很多没有用的jar包?
有没有发现在项目中因为jar 冲突而折腾很久?
有没有想过我只依赖jdk 就实现一个web工程?
有没有发现其实我们只需要一小块功能,而需要引入一个大框架?
有没有发现其实有些功能非常简单,而被框架限制了?
有没有发现其实有些功能原理不复杂,而框架实现很庞杂?因为不相信程序员!
有没有发现相似的框架提供的业务功能是一致的?但对外的接口是不同的?想不想统一 ...
sparraw 框架js 版开源上线
www.sparrowzoo.net
功能包括菜单 进一步继续完善中。。。
简单动画效果
以上菜单可以在线预览
对话框功能
日期选择控件,仿windows 7日期选择效果
markdown 及代码高度效果
sparrow-js 前端js框架变幻莫测,但原生js 接口不会变,所以以不变应万变,需要对前端js的原生api熟练掌握。为减少学习成本,将sparrow js 开放,支持大部分网站开发常用组件,代码简洁,无冗余。
功能列表
string 方法
array 方法
ajax
browser 浏览器相关支持
valiate 前端验证框架
toolip 提示
menu菜单支持
jquery常用功能支持
简单动画效果
相关demo展示
接上一篇
sparrow算法篇 从日期取交集到思维模式
这样的时间段有成百上千条该如何处理?
如果我们需要根据具有日期交集的时间段分组呢?
如果我们的业务不是日期,而是其他数据类型呢?如何抽象出计算模型?非日期型数据也可以进行分组?
上一篇分享日期取交集的核心逻辑。 但映射到具体业务上可能有更复杂的场景,比如第一个问题,两个日期取交集还好搞好,但日期段很多的情况下,如何按每一个时间段相同的数据进行分组呢。
- 2018-03-09 18:04
- 浏览 1201
- 分类:开源软件
动机
markdown 已成为网络博客最主要的排版格式。但一般都是有现成的软件支持,比如有道云笔记。但要想将markdown 功能集成到自己的博客或者公司的oa 上,需要一款开源的轻量的markdown解析程序,从github 找了一些开源项目相对都比较重,二次开发成本较大,所以笔者在春节期间开发了一款轻量级的markdown解析程序,符合oop开发原则,最大化复用和解耦。方便二次开发集成。
功能
标题支持 h1 h2 h3 h4 h5 h6
水平线支持 horizontal_line
引用支持 quote
tab 引用
复选框支持 check_box
源代码支持code ...
日期交集
早在13年左右的时侯,做过一个系统,功能很简单,做一个日程管理功能,这里边涉及到一个小知识点,就是日期取交集。今天跟大家分享的是从这个点展开的,时间段取交集的话题。
业务逻辑
逻辑很简单,就是一两个日期段取交集,可如果按正常思维去实现,其实日期交集的场景我们可以穷举出来,大概有4种情况
s1--------------e1
s2-----------------e2
s1--------------e1
s2-----------e2
s1----------
- 2018-02-06 23:46
- 浏览 1480
- 分类:开源软件
sparrow-mvc
sparrow-mvc 是sparrow框架其中的一员,模拟spring mvc功能实现。 目前实现功能列表
参数自动化注入
flash参数跨页面传递(包括中传页面和重定向页面)
restful风格支持
参数解析功能
返回结果解析
url-method映射
url rewrite功能(自动原生支持)
拦截器支持
国际化支持
json返回支持(原生支持)
异常统一结构化规范支持
html服务器控件支持 包括grid view功能
其它功能
以上是目前sparrow mvc实现的大部分功能 其他未涉及功能希望各位小伙伴可以多提意见,spr ...
接上一篇
[redis客户端封装意淫](https://www.jianshu.com/p/03132e0d50e2)
对现在有接口,进一步重构。
进一步对客户端友好封装,对数据类型的转换,封装进框架内。
增加cachedatanotfound hook,并保留原有异常抛出接口,提供客户端灵活调用。
对key的business 部分提供灵活扩展接口,为特定业务的监控提供扩展。
接口不只依赖redis,理论上可以对redis 的不同接口进行实现,包括jedis sharded jedis jedisson以及其他异构缓存系统。
将接口按类型进行拆分,避免类过于 ...
- 2018-01-30 13:32
- 浏览 901
- 分类:开源软件
redis 本身有客户端,先抛出来一个问题?为什么要对redis客户端进行二次封装?
大概在11年时侯,第一次接触redis,那时侯研究过redis的各种数据结构,直接拿redis的客户端jedis直接用。公司安排人要对jedis进行封装,当时就很不理解,为什么非要封装一次才可以?
后来自己写框架,意识到一些东西是需要封装的,比如连接的打开和释放,比如一些危险的方法,比如keys * 比如flushdb 等
后来形成了这样的代码结构
t execute(executor executor, key key)throws cacheconnectionexception {
sha ...
- 2018-01-25 21:41
- 浏览 929
- 分类:开源软件
sparrow 框架设计最大化解耦,理论上业务层只依赖sparrow-facade即可,接口可由第三方如spring c3p0 fastjson logback 具体实现。
整体架构图如下:
sparrow 架构图
sparrow-facade
基础核心层,实现了一些框架和上层业务涉及到的一些工具类类,如图
工具类库
包括bean properties 反射(非jdk反射)读写,class 集合类,日期,email ,文件 ,正则等常用工具类.核心功能,后文将一一介绍。
sparrow-cg
sparrow code generator 并不是简单 ...
- 2018-01-24 22:02
- 浏览 1047
- 分类:开源软件
sparrow 框架
麻雀虽小,但五脏俱全
为什么要写这个框架?
这个框架我从11年开始写,中间重构了n遍,最原始的代码可能都找不到了,之所以坚持写,不是想新造轮子。 主要是从中学习基础原理。 经过近十年的打磨,有些设计思想和理念,是值得学习的,比如spring mvc 的设计模式,orm ico 等等。 虽然很多朋友们都了解,但要真正自己实现起来也并不是那么容易。而这个过程对原来的深入理解是很帮助,所以将这部分开源出来,供有同样需求的朋友参考,大家一起进步,成长。
框架的设计哲学和概要
软件设计6大原则,这里推荐几本书,martin flower 的重构, 敏捷软件开发 ...
- 2018-01-24 13:21
- 浏览 1035
- 分类:开源软件
tomcat 启动时使用的是java.util.logger 日志框架
tomcat 实现类
package org.apache.juli.logging;
import java.util.logging.consolehandler;
import java.util.logging.formatter;
import java.util.logging.handler;
import java.util.logging.level;
import java.util.logging.logger;
/**
* hardcoded java.util.loggi ...
- 2017-07-15 14:06
- 浏览 573
- 分类:开源软件
程序异常会中断程序执行,所有所有的异常都需要捕获,否则会导致程序中断,一般异常由服务提供者捕出,由服务调用者捕获。这里借用think in java 的服务器程序员与客户端程序员概念。
为什么使用异常
1 返回的类型不支持,通过异常返回给用户。例如 boolean login(username,password)
2 可以显示的提示客户端程序员进行捕获异常并做出处理
存在问题:性能问题
解决办法:
覆写fillinstacktrace
http://www.blogjava.net/stone2083/archive/2010/07/09/325649.html
...
- 2013-10-14 14:46
- 浏览 1232
- 分类:编程语言
manifest.mf 文件内容完全详解
- 博客分类:
- java
打开java的jar文件我们经常可以看到文件中包含着一个meta-inf目录, 这个目录下会有一些文件,其中必有一个manifest.mf,这个文件描述了该jar文件的很多信息,下面将详细介绍manifest.mf文件的内 容,先来看struts.jar中包含的manifest.mf文件内容:
manifest-version: 1.0created-by: apache ant 1.5.1extension-name: struts frameworkspecification-title: struts frameworkspecification-vendor: apache soft ...
- 2013-09-02 14:49
- 浏览 1088
- 分类:编程语言
程序员是严谨的,但是再严谨也容易出问题,这就叫做bug。
我奉献几点自己遇到过的几点问题。
1 =与==
这个问题很容易被忽视,经常少一个=,在c语言陷阱里有这个问题,就是工作几年的老程序员,也同样遇到过。
2 =与!=
讲一个真事,公司一个同事做注册用户的用户名敏感词过滤,结果少写了一个!结果可想而知,还开玩笑说,我只少写了一个符号。
3 -与_
这里是在url里,给第三方提供接口的时侯,少写一个符号或者把_写成-结果都是很严重的,所以在url中一定要亲自点击浏览一下,确定是否可用。
4 &与*
这两个符号离得很近,但运行结果差得很远,我写一个24小时的定时任务,把*写成了& ...
- 2013-08-30 14:14
- 浏览 1579
- 分类:编程语言
疯子在思考之-从日志想到的软件架构
- 博客分类:
- java
谈到架构是一个很泛的话题
这里我们讨论一下兼容性与扩展性
我们为什么用接口?这是很多java程序员都会问过的问题
我的答案是为了扩展和兼容
最近的框架中想加入日志功能,想自己写一个简单的日志操作类
其实我们最常用的应该是log4j
但jcp标准是java.util.logger 这两个东西完全不兼容,网上有很多说明了原因。有兴趣的同学可以去网上查一查。
其实日志随便用什么框架或者自己写都是可以的,为什么还要如此纠结呢?
这里我纠结的不是功能实现,而是其中的思想。
我怎么才能做一个可扩展的日志框架?
jcp的标准并不是实际上的标准,就象osi和tcp/ip一样,理论上的与工业上实际标准并 ...
- 2013-08-28 18:57
- 浏览 1744
- 分类:编程语言
很长时间没写博客了,最近事情比较多
之前在文章中提到过tomcat 的main函数在哪?被很多朋友拍砖了
今天继续就这话题展开,先了解几个线程有关的概念
1、多线程 multithread
为什么要用多线程?就是让cpu别太闲,有空就要干活,提高效率。
2、线程池 threadpool
为什么要用线程池,所有跟池相关的,如connectionpool(数据库连接池),ajax request请求对 象池、线程池等都是为了减少对象new所带来的开销.
3、线程安全 thread safe
所谓的线程安全就是指多线程的运行结果与单线程的运行结果一致,java 通过synchronized和th ...
- 2013-08-14 15:13
- 浏览 3081
- 分类:编程语言
linux 自动重启tomcat 脚本
- 博客分类:
- java
tomcat作为开源的服务器,性能与稳定性上比起一些商业服务器还是要差一些。将项目部署到tomcat后隔段时间就会死掉,出现这种问题的主要原因可能是内存数据溢出,因为tomcat容器在发生大量与数据库交互查询或者操作的时候很容 ...
- 2013-08-12 17:59
- 浏览 2759
- 分类:编程语言
1. 如何加大tomcat连接数
在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:
minprocessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxprocessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptcount:允许的最大连接数,应大于等于maxprocessors,默认值为100
enablelookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectiontimeout:网络连接超时,单位:毫秒。设置为 ...
- 2013-08-12 17:42
- 浏览 1402
- 分类:编程语言
log4j的logger继承 1、log4j的继承是通过命名来实现的。
比如logger.a.b就会继承logger.a的一些设置。
2、子logger会默认继承父logger的appender。
如果配置中这样写:logger.a=info,app_a,logger.a.b=debug,app_b,那么实际上,logger.a.b的配置是这样的:logger.a.b=debug,app_b,app_a。
3、子logger只在自己未定义输出级别的情况下,才会继承父logger的输出级别。
比如配置中这样写:logger.a=debug,app_a,logger.a.b=,app_b, ...
- 2013-08-12 17:07
- 浏览 1188
- 分类:编程语言
- 博客分类:
- java
数据库substring(source,startindex,length)
javascritp substring(source,startindex,endindex)
java substring(source,startindex,endindex)
c# substring(soiurce,startindex,length)
有遇到的大家补充~
- 2013-08-06 23:17
- 浏览 1099
- 分类:编程语言
package com.jp.action;
import java.util.hashmap;
import java.util.map;
import java.util.logging.logger;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import org.springframework.web.bind.requestutils;
import org.springframework.web.bind.servletrequestbi ...
- 2013-08-06 10:47
- 浏览 1219
- 分类:开源软件
关于sqlsession我们先看这些问题:
我们做web开发,很容易联系到http的session,那么它跟进http的session有关系吗?
如果非要映射到web开发中的某个对象他到底跟哪个对象很象呢?
sqlssion是用来做什么的?
如果只是数据库连接为什么不直接用sqlconnection呢?
我们从配置文件可以看出他由sqlsessionfactory产生,sqlsessionfactory需要datasource.那么datasouce是什么呢?
它跟数据库连接池有什么关系呢?
sqlsession是线程安全的吗?
最后一个问题很有代表性,关于线程安全问题接下来会专门写一篇文章 ...
- 2013-08-02 11:54
- 浏览 11060
- 分类:编程语言
一个实际例子直接帖代码
# log4j configuration file
##################################################################
# pattern to output the caller's file name and line number.
##################################################################
#等级为info的日志信息输出到ota,ota的定义在下面的代码,可以任意起名。#
#等级可分为off、 fatal、 ...
- 2013-07-30 15:20
- 浏览 2943
- 分类:编程语言
mvc-1
http://lizhizhang.iteye.com/blog/1912005
mvc-2
http://lizhizhang.iteye.com/blog/1913546
自己动手写mvc3,前两篇我们分析了mvc的基础,在这里大家对main函数有争论,接下来会有java多线程的文章,与大家分享。(这里会略带一些tomcat main函数的内容)。
第二篇介绍了为什么要用mvc以及mvc的概念,即什么是mvc。
通过以上的了解,我个人认为,对于开发者来讲,mvc的filter即我们在web.xml中配置的拦截器是不重要的,框架为我们写好了,我们做的事情就是配置一下就可以了,而我们 ...
- 2013-07-29 09:56
- 浏览 4497
- 分类:开源软件
前几篇文章写了java框架的思考
http://lizhizhang.iteye.com/blog/1909415
ioc的思考
http://lizhizhang.iteye.com/blog/1910976
mvc的思考入门篇
http://lizhizhang.iteye.com/blog/1912005
今天接着说mvc
接着上文的问题:
为什么出现mvc?它到底是什么?
我们引用struts2 买球官网平台官网的一段话
web applications based on javaserver pages sometimes commingle database code, page design ...
- 2013-07-25 16:16
- 浏览 1596
- 分类:开源软件
这篇主要讲web开发基础,mvc概念的原型会从这里体现。
首先提一个问题main方法在哪?
我们学的第一种语言,写hello world时都会写main方法(除脚本语言外),那么我们想一下,我们写web程序时main在哪?
我们以b/s结构为例,很容易想到main其实有两个,一个在服务器端一个在客户端。那么服务器和客户端的通信走的是socket。通信的内容要有协议,即我们熟悉的http,http请求两个最核心的对象是request和response。那么我们再简单回忆一下web程序的hello world 过程.
request 发现请求服务器端接收处理后通过response返回给客户端.这是w ...
- 2013-07-23 09:44
- 浏览 5492
- 分类:互联网
eclipse 默认为中文编码为gbk,当用gbk环境写的代码,其物理文件的编码为gbk.即使用eclipse 改为utf-8其物理文件的编码仍不变,所以通过以下代码生成。
package com.sparrow.utils;
import java.io.bufferedreader;
import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstreamread ...
- 2013-07-21 10:50
- 浏览 1734
- 分类:开源软件
控制反转 英语:inversion of control,缩写为ioc
我想很多同学都会思考过这样的一个问题,控制反转,什么地方反转了,是不是翻译的不对?
这里插一句
当年马云借着盖茨的嘴说:“互联网会改变世界。”其实是他自己说的,因为� ...
- 2013-07-21 01:26
- 浏览 5346
- 分类:开源软件
« 上一页 1