- 博客(25)
- 资源 (9)
- 收藏
- 关注
原创 javaCC---可读到可编程的桥梁
简单来说,javacc是一套词法、语法解析器。我们的java程序代码就是通过javacc进行前置的编译处理,对合法性进行校验,并生成对应的抽象语法树(AST),然后基于此做各种编译提示和编译优化的。...
2022-07-12 20:39:23
1711
原创 calcite解读专栏前言
前言下定了很大决心,终于决定写一个专栏。某种意义上来讲,这也是一种立flag,倒逼自己的行为。最后有没有打脸暂且不论,开个头总是好的。决定以calcite作为对象,是因为目前工作主要接触到就是它。作为Olap引擎中sql解析和优化的事实标准,caclite有其独特的优势。我个人理解,主要是以下几点:轻量,足够轻量,让其被引入的成本低;扩展性强,在calcite设定的框架下,扩展优化规则和一些代价计算算法十分容易;sqlNode和relNode模型抽象简易,sql标准支持成熟。虽然calcit
2022-04-12 21:13:12
1268
原创 链表反转
初始化结构数据public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }ListNode n1 = new ListNode(1); ListNode n2 = new ListNode(2); ...
2020-04-08 14:18:39
190
原创 内存数据库
JAVA内存数据库使用demo博客分类: JAVAMySQLjavahsqldbjdbcderbysqlite上篇文章散仙,写了关于SQLite的使用,本篇我们看下几款JAVA开源的数据库,主要有3个,derby,H2,HSQLdb,都是非常不错的数据库,既可以当内存库,又可以嵌入移动设备充当数据存储的角色,而且完全支持关系型数据库的SQL语法,所以适当了解一些,对以后的数据存储的,或计算会...
2019-09-25 15:26:03
1262
转载 BigData-‘基于代价优化’究竟是怎么一回事?
本文系转载,如有侵权,立删还记得笔者在上篇文章无意中挖的一个坑么?如若不知,强烈建议看官先行阅读前面两文-《SparkSQL – 有必要坐下来聊聊Join》和《BigData – Join中竟然也有谓词下推!?》。第一篇文章主要分析了大数据领域Join的三种基础算法以及各自的适用场景,第二篇文章在第一篇的基础上进一步深入,讨论了Join基础算法的一种优化方案 – Runtime Filter...
2019-06-27 14:26:50
285
原创 类和接口
类和接口的设计,作者主要阐述了几个观点:尽量多用接口,少用抽象类将标签类抽取类层次,降低复杂度如果一定是is-a的关系,采用继承,否则优先使用聚合接口优于抽象类java为了降低复杂度,减少菱形继承带来的危害,规范上只允许继承(extends)单个类,但是允许实现(implements)多个接口。这意味着,如果要让一个类具备多种能力,实现接口是最佳的方式。但是抽象类就一定不可取吗?...
2019-04-24 16:56:36
1042
原创 我的书单
架构《企业应用架构模式》 Martin Fowler《软件架构实践》林马斯《Clean Architecture》《微服务设计》 Sam NewMan《领域驱动设计》Eric Evans
2019-03-06 19:29:56
268
原创 Linux常用指令备忘
挂载CD,共享盘mount -t cifs //10.19.133.12/共享文件夹 -o username=lfz 目的文件夹路径设置linux主机ip和网关,重启失效ifconfig eth0 192.168.1.20 netmask 255.255.255.0route add default gw 192.168.1.254
2016-10-19 16:04:16
267
原创 简单的C++反射实现
java和c#等高级语言拥有反射机制,可以通过字符串很方便的生成对应实体。这极大的方便了对象的序列化及对象的生产效率。C++开发人员一直想要这么一个机制,希望仅通过配置文件就可以改变程序的行为却不需要修改代码。现实是,我们将希望寄托在工厂类上,需要修改行为,则需要修改工厂的生产产品。尽管将修改集中于一处或者几处,但仍旧是修改了代码,不够完美。所以C++能不能拥有反射机制呢?
2016-08-03 20:52:30
750
原创 c/c++奇技淫巧
一. 变长数组严格说来,变长数组的实现在c++中并不是一件麻烦的事情。Stl中的vector本身就是一个变长数组,并且有自动管理内存的能力。 但是在c中,实现变长数组就稍显麻烦。用C实现,必然需要一个结构,结构当中应当有一个指针,指针分配一段内存空间,空间大小根据需要而定,而且必须有另外一个字段记录究竟开辟了多大多长的空间。
2016-08-03 20:15:06
1496
转载 VS2008的程序,运行时遇到R6034错误:
An application has made an attempt to load the C runtime library without using a manifest.
2016-04-14 10:18:45
1520
原创 windows下的函数耗时统计工具
先上代码:#include <Windows.h>/** @class CFuncTimeTestter * @brief 函数执行时间测试器 */class CFuncTimeTestter{public: explicit CFuncTimeTestter(const std::string& moduleName="", const std::string& test
2016-03-09 09:48:10
806
原创 OCX的调试
OCX实际上还是一种dll,只不过暴露的接口能够被web直接访问。在vc6.0时代,有提供ocx容器进行接口的测试,但是在新版的vs2008以及后续版本的vs工具中,该工具已被移除。那么,我们该如何方便的对ocx进行调试呢? 既然ocx是被web调用的,我的思路是直接用html写一段测试代码。但是怎么进行调试呢? 上图中的Command和CommandArgument是关键所在——C
2016-03-05 11:16:14
1083
原创 守护进程的开发
所谓守护进程,顾名思义是通过另一个进程对某个重要的进程进行保护,防止被保护进程异常退出,与看门狗功能类似。编写此类功能,思路非常简单,首先我们需要一个定时任务对所有的进程进行扫描,然后核对需要守护的进程的相关信息如进程名,是否在系统进程列表中,如果不在则表示进程已经退出,需要通过编码方式启动被守护进程。
2016-03-03 15:33:08
481
转载 Windows调试——使用windbg查找内存泄露
内存泄露查找方法C++程序员经常不注意内存使用的关闭,虽然此类问题不会导致程序逻辑问题,但随着时间的推移,内存占用量越来越多,最终导致程序崩掉。对服务端的程序,内存泄漏经常是致命的。 对于已经存在内存泄露的程序,可能Windbg查找内存泄露的代码。下面介绍如果通过Windbg查找内存泄露。Windbg 加载程序依赖库所用pdb文件。挂载进程或者加载已生成的pdb文件输入命令查看内存。3.1
2016-02-23 20:35:40
6104
转载 Windows调试——死锁的查找
首先看看什么是死锁呢?死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 1) 先用!locks查看所有的线程占用的锁 注意,该指令在新版本的windbg中已经无法使用。需要使用的话必须切换版本到dbg_x86_6.10.3.233.msi。 这里可以看到有三个线程正在等待三个锁,第一个线程等待的锁是0043a620
2016-02-23 20:07:31
3772
原创 Windows调试——基本知识
基本寄存器和反汇编知识 EBP: 扩展基址指针寄存器(extended base pointer) 其内存放一个指针,该指针指向系统栈最上面一个栈帧的底部。 ESP: 栈顶指针,用于指向栈的栈顶(下一个压入栈的活动记录的顶部),而EBP为帧指针,指向当前活动记录的底部。 EIP: 指令寄存器,存放当前指令的下一条指令的地址。CPU该执行哪条指令就是通过IP来指示的。具体代码: 反汇编代码:#
2016-02-23 19:01:30
716
转载 VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导
2016-02-23 15:52:22
710
转载 vs2008突然不能使用查找功能了
查找全部 “xxx”, 大小写匹配, 全字匹配, 查找结果 1, “整个解决方案”, “.” 找不到要查找的文件。 查找进行的过程中被停止。 . VS”Find in Files”失效的解决方法一: 让VS窗口获得焦点,依次按以下快捷键 Ctrl+Break Ctrl+Scroll Lock Alt+BreakVS”Find in Files”失效的解决方法二: 在注册表中删除”HK
2016-02-23 15:33:35
787
原创 给VC程序添加版本号与编译时间
一般来说,发布的正式软件都会包含程序的svn版本号以及软件的编译版本和编译时间等信息,但是这些东西并不是默认就存在的,需要我们进行一些步骤的处理。具体做法有几种,万变不离其宗的是,利用SVN自带的指令获取到版本号以及当前时间,填充模板当中的占位符,最后用替换后的模板覆盖资源文件即可。这里只讲最简单的一种:
2016-02-23 14:59:13
4616
原创 dll动态加载,LoadLibrary和LoadLibraryEx的区别
如果一个dll存在其他dll依赖,且不再相同目录,则需要使用Ex接口 具体说来若DLL不在调用方的同一目录下,可以用LoadLibrary(L”DLL绝对路径”)加载。但若调用的DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用LoadLibraryEx: LoadLibraryEx(“DLL绝对路径”, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
2016-02-23 11:25:58
32805
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人