
实战技巧
蚁方阵
千里之行,始于足下,用代码编织技术人生
展开
-
Weblogic 9不能兼容JPA2.0设置
Weblogic 9配置JPA(基于Hibernate实现)失效原创 2016-06-02 09:38:31 · 668 阅读 · 0 评论 -
一起绝对定位失败的案例分析
利用元素的hover特性做一个浮动菜单,相关的LESS代码如下:li.sti-menu-parent { position : relative; >a { i:first-child, span.txt { display : none; } } /* 先隐藏浮动菜单 */ >ul.sti-menu-s原创 2016-11-25 18:37:44 · 2126 阅读 · 0 评论 -
Win 10关机后电源灯不停闪烁的解决办法
Win 10系统关机后,发现电源一直有规律地闪烁不停,硬盘灯也是如此,把耳朵贴到风扇出口,发现风扇也在运转,这说明CPU还在工作,怎么可能呢? 在网上搜索了一遍,相关的原因诊断及解决方案五花八门,越到后面越吓人,大体分为以下几种: 1. 启用高级电源管理; 2. BIOS设置错误; 3. 屏幕故障; 4. 显卡故障; 5. 电源故障; 6. 主板故障; 上面的解决方案一一被我排除了,原创 2016-11-27 09:51:19 · 23072 阅读 · 1 评论 -
强烈推荐前端编程利器:brackets
本来一直钟爱WebStorm,但总是用破解的软件,感觉很不爽,并且靠谱的SN越来越少,Sublime亦是如此。Eclipse(Javascript版本,Aptana Studio)也是一个很好的选择,大气的布局,熟悉的快捷键,但经常容易出现莫名其妙的故障(比如这次HTML编辑器就出现莫名其妙的故障),并且对ES6、LESS、Jade的新技术支持太差,NetBeans也是如此。寻找了很久,终于找到了一原创 2016-11-27 10:07:52 · 4838 阅读 · 0 评论 -
HTML、CSS、JS Unicode字符互转
对于Unicode字符,HTML、CSS、JS的计算方式完全不一样,但可以相互转换。1. HTML字符计算方式对于Unicode,HTML采用十进制方式计算,并以”&#{unicode};”方式进行表示,例如对于“|”字符,HTML的表示方式如下:<span>|</span>需要特别注意的是,十进制必须至少4位数,也就是说如果不足4位,则“&#”后面补0,再强调一遍,千万不要省略0。2.原创 2016-12-21 10:15:26 · 2708 阅读 · 0 评论 -
setTimeout与setInterval性能比较
谈到动画,就避不开setTimeout与setInterval,都能实现动画效果,但对我来说,只有需要手动控制帧的速率、频率时,我才会优先选择setTimeout,因为我知道,论性能,setTimeout略逊于setInterval。造成性能差异的原因,主要有两点: 1. setTimemout迭代式方法的调用方式,压栈、出栈都不是轻量级的任务; 2. setTimeout自身消耗了部分性...原创 2017-01-11 09:51:47 · 5517 阅读 · 3 评论 -
神奇的window.name:不要声明全局变量name
在技术研讨中,偶然发现一个非常有意思的变量——window.name,这是一个window默认自带的属性,类型为“string”,不可改变其类型,也就是说,如果对其赋值,值必须为string类型,否则会自动调用值的toString方法,将值转换为string类型。// 输出true,表明为window的自身属性console.log(window.hasOwnProperty('name'))原创 2017-01-11 10:43:55 · 2747 阅读 · 0 评论 -
JSTree手动管理AJAX请求
在项目中,突然出现这样的需求:1.顶层节点一次性全部给出;2.子节点延迟加载;3.数据格式需要严格遵守厂商的规格;一看厂商的规格,,果然如此,跟JSTree默认的格式差了不少,这样就需要手动处理jstree的AJAX请求,核心代码如下: $('#jstree').jstree({ 'core' : { 'data' : function(obj, cb) {原创 2017-01-17 17:01:39 · 3511 阅读 · 0 评论 -
一种嵌套式栅栏布局的对齐方式
在bootstrap的应用中,经常需要对栅格进行嵌套布局,但也因为如此,很容易出现内容无法对齐的现象。UI给定的要求是两栏表格布局,文字与输入框的占比为1:3,详细布局文件见下图。 几乎不用思考,我们就能很快写出第一行布局,代码如下:<form action="" class="form-horizontal"> <div class="form-group"> <!--原创 2017-02-20 16:46:05 · 2275 阅读 · 0 评论 -
一种拦截AJAX数据的方法
一个实际运营中的产品,突然遇到了这样的展示需求:在前端拦截所有的AJAX请求,将其中的XXX电力局字样全部改为XXX水利局字样。首先想到的是利用jQuery的全局AJAX方法,但检索了一遍.ajaxComplete、.ajaxComplete、.ajaxSuccess等全局方法,发现所有的全局方法都只能对AJAX数据进行只读操作。难道真的没有办法了吗?重新复写$.ajax方法是否可行?应该可以达到目原创 2017-02-20 17:10:50 · 5620 阅读 · 0 评论 -
怎样获取页面定时器的数量
在诊断内存泄漏的过程中,判断定时器的正确使用是其中的一个重要阶段,但浏览器并没有直接提供这样的指标与方法。尽管如此,我们可以充分利用定时器的特性,获取当前窗口一共创建了多少个定时器,方法如下:// 通过空函数获取当前定时器的数量// 定义器的派发是递增的var timer = setTimeout(function() {}, 1000);// 清除多余的定时器 clearTimeo原创 2017-04-11 10:56:38 · 11255 阅读 · 0 评论 -
怎样获取页面的DOM节点数量
诊断内存泄漏的一个重要步骤是判断页面的DOM数量的增长情况,因此我们需要持续获取页面的DOM数量,方法如下:// 递归函数function countNodes(node) { // 计算自身 var count = 1; // 判断是否存在子节点 if(node.hasChildNodes()) { // 获取子节点 var原创 2017-04-11 10:57:26 · 9633 阅读 · 0 评论 -
浏览器校验上传文件的大小
以前一直基于IE编程,总觉得在客户端校验文件要么需要降低浏览器的安全性限制,要么必须将文件上传到服务器进行校验,今天又遇到小组成员问同样的问题,于是查阅了一番MDN,才发现DOM File API已经进步得非常强大了。假定页面的文件上传元素如下:<input type="file" id="aFile"/>校验上传文件的大小方法如下:// 获取到文件上传元素var aFileDom = docu原创 2017-04-21 15:22:09 · 2468 阅读 · 0 评论 -
巧用Function实现动态字符串模板
在前端模板的实际应用中,模板是提高效率的常用手段,但很多时候,模板可能不是预置的,而是只有在运行时才能决定,这时候就需要使用动态模板。使用场景如下: 1. 用户(配置人员)在页面输入HTML模板,并嵌入变量 2. 在特定条件下,编译HTML模板 3. 返回编译结果解决办法如下:// 假定用户输入的数据为htmlif(!!html && html.length > 1) { let原创 2017-05-12 16:22:23 · 1438 阅读 · 0 评论 -
如何在地图上打点数百万条数据
要将大量数据打点到地图上,原以为添加多个IFrame,充分利用多进程的优势,可以增加打点的数量与速度,结果大相径庭,Iframe数量越多,性能越差,具体测试数据如下,消耗时间单位为毫秒: 打点数量\窗口数量 1个窗口 4个窗口 16个窗口 100000 517 1167 3662 200000 1622 3319 5342 400000 3241原创 2017-05-28 11:28:31 · 6370 阅读 · 1 评论 -
JS中一种快速浅复制数组的方法
今天,偶然在Javascript的练习中,发现了一种数据快速千夫指的方法:var array = [1, 2, 3, 4, 5], copy = array.slice();// 输出结果为false,说明它们指向了不同的数组对象 alert(array == copy)查阅JS手册,发现对slice方法的说明如下:返回值返回一个新的数组,包含从 start 到 end (不包原创 2017-06-18 20:36:03 · 5591 阅读 · 0 评论 -
$.ajax使用总结(二):伪造IP地址
在JAVA与PHP的程序中,为了保证IP的正确性,经常采用如下的方法获取浏览器端的IP地址,代码如下:String ip = request.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("原创 2017-06-20 15:17:18 · 6881 阅读 · 2 评论 -
一种快速划分千分位的方法
将整数按千位划分,如将12345划分为“12,345”,方法有很多种,例如整除1000的次方取余法,正则多次匹配替换法(首先检查字符串中是否还包含4位整数,然后逐次替换),无论上面的那种方法,都需要进行多次while循环,本文试图提出一种不用循环就成千分位快速划分的方法。解决的思路如下: 1. 首先将数字转换位字符串; 2. 对字符串的长度取余,划分首部与尾部; 3. 对尾部进行字符串替换;原创 2017-07-01 23:16:53 · 3746 阅读 · 0 评论 -
前端XSS攻击的三种方式
针对HTML的script标签特性,对前端页面可以采取如下3中脚本注入方式。1. 添加script元素在页面中直接创建script元素,然后利用textContent特性进行脚本执行,如下: var script = document.createElement('script'); script.textContent='alert(100)'; // 立刻就会在页面进行执原创 2016-11-25 11:00:35 · 5342 阅读 · 0 评论 -
LESS实战技巧(一):实现多态的两种方法
在LESS中,通过Mixin的函数多态特性可以降低调用的复杂度,显著提高工作效率,并能大幅减少代码工作量,实现多态的方法有两种,如下。1. 函数调用方式函数定义的方式如下:.tr-td-style(@size:12px;@color) { tr { height : @size; td { font-size : @size;原创 2016-11-25 10:59:42 · 1580 阅读 · 0 评论 -
Eclipse出现Failed to load the JNI shared library jvm.dll错误的解决办法
Eclipse启动提示提示Failed to load the JNI shared library jvm.dll错误,可能是如下两种原因: 1. 当前环境的确不存在jvm.dll,只需要重新安装JAVA并设置好JAVA环境变量即可; 2. eclipse的版本与jre或者jdk版本不一致(一个是64位,一个是32位)。原创 2016-08-17 15:09:12 · 1490 阅读 · 0 评论 -
汉化Birt的WEB操作界面
Birt是一款优秀的报表工具,提供了WEB端与Eclipse客户端两种报表预览方式,为了让其更好地支持中文,需要修改其默认的i18n资源文件。原创 2016-09-05 14:45:55 · 1228 阅读 · 0 评论 -
Spring使用总结(一):缓存
Spring Framework的Cache接口完全与JDK的ConcurrentMap定义相似,但是在调用的同时会触发一些相关事件,用于缓存同步与更新,如从远端节点复制entry等。此外,与ConcurrentMap不同的是,其拥有的方法如size(), values(),keySet() 与entrySet()都是不可靠的(因为没有同步锁),并且还可能影响性能,所以一般只应用于调试环境,生产环境原创 2016-09-05 14:54:08 · 329 阅读 · 0 评论 -
Birt导出PDF时乱码的解决办法
首先,找到 org.eclipse.birt.runtime_4.2.2.v20130216-1152.jar,用winrar解压,找到config_PDF.xml文件,将其中all-fonts的内容修改为如下:<composite-font name="all-fonts"> <font font-family="SimSun" catalog="Chinese" /></composite原创 2016-09-05 15:08:03 · 2293 阅读 · 0 评论 -
Augularjs学习思维导图
AngularJS的学习思维导图原创 2016-09-05 15:17:55 · 1175 阅读 · 0 评论 -
PL/SQL的安装与Oracle环境配置
首先下载Oracle OCI客户端oracle instantclient basic package 下载地址:http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html 下载时请区分好客户端版本,确定其支持的Oracle Server版本,如下: 1. instantclient原创 2016-09-05 15:26:59 · 579 阅读 · 0 评论 -
Bower文件无效:Name must be lowercase
切换个人文件夹的地址后(从C:\Users切换到D:\Users,据说bower升级后也会出现此问题),突然发现Bower无法安装JS库文件,提示信息如下。bower EINVALID Failed to read E:\xxx\bower.jsonAdditional error details:Name must be lowercase, can contain digits,原创 2016-09-18 17:18:40 · 6007 阅读 · 1 评论 -
python SQL注入的解决办法
APP爆出一个大Bug,只要在查询框内输入“%”,就会检索出所有的数据,最后有人给出了这样的解决方案,在前端进行验证,禁止用户输入“%”之类的特殊字符。原创 2016-09-07 16:35:14 · 6224 阅读 · 1 评论 -
如何清除匿名定时器
在JS中,并没有查看所有定时器的接口,所以无法知道程序中使用了多少个定时器,更无法知道定时器对应的执行函数,在这种情况下,我们一来难以清除匿名定时器,二来难以一次清除所有的定时器。幸好,现在主流的浏览器(包括最新的Chrome、Firefox以及ID)都默认给定时器分配了一个较小的ID,数字一般小于9999。利用这个特性,我们可以很轻易地清除掉所有的定时器,包括匿名定时器与命名定时器。示例如下://原创 2016-09-28 11:07:57 · 5916 阅读 · 2 评论 -
大屏可视化(二):Scale同比缩放视图
在高分屏中,修改浏览器的缩放比例,其实就是修改浏览器的DPI,即单位面积内可用的像素点数,从而在屏幕尺寸保持不变的情况下,达到了改变视窗宽高的效果(用像素计量),简单来说,放大比例会减少DPI,宽高变小,减少比例会增加DPI,宽高变大。总的来说,通过修改浏览器的缩放比例来适应分辨率,是一种最经济的做法(不需要编写任何代码),唯一的缺点在于需要手动调节,导致难以找到最合适的缩放比例。今天再介绍利用CS原创 2016-09-28 11:45:41 · 7401 阅读 · 1 评论 -
jqGird错误“decimalSeparator”的解决办法
在使用jqGrid的过程中,突然出现以下错误:jquery.jqGrid.js:15016 Uncaught TypeError: Cannot read property 'decimalSeparator' of undefined仔细检查了好几遍jqGrid的配置,依旧发现没有明显的错误,jquery、jqgrid的版本也没有兼容问题,最后经过仔细确认,发现问题出现在国际化文件上。在程序中引入原创 2016-10-28 17:12:07 · 4101 阅读 · 1 评论 -
怎样解决Birt的中文乱码
1. 查看PDF的字体文件打开任意一份PDF中文文档,执行文件->属性菜单顺序,切换到字体Tab页,发现嵌入的字体子集里包含宋体、微软雅黑等字体,这是各种PDF渲染各种文字的关键。2. 添加字体文件Birt是利用iText对PDF进行渲染的,所以可能通过修改config_PDF.xml文件来添加所需要的字体,以SimSun.ttf字体库为例。下载SimSun.ttf文件,将其添加到系统字体文件中,这原创 2016-11-29 16:15:28 · 3020 阅读 · 0 评论 -
jQuery应用总结(一):DOM与事件
1. 延迟创建DOMjQuery在使用创建DOM时,并不会立即调用document.createElement创建HTML元素,而是只有挂载到DOM结构树时,才会生成HTML元素,如下所示:// 此时并不会创建HTML元素var view = $("<div></div>");// 此时才会生成HTML元素view.appendTo(document.body)换句话说,无论用哪种方式创原创 2016-11-30 22:11:43 · 441 阅读 · 0 评论 -
JQuery如何获取ID含有特殊字符的DOM元素
因为业务需要,DOM元素的ID被命名为“INDEX: 2016.09.11”,执行JQuery的DOM查询时,提示如下错误Uncaught Error: Syntax error, unrecognized expression: [id=INDEX: 2016.09.11]1. 解决办法:document.getElementById以前总觉得这个办法笨拙,现在越觉得此方法强大,几乎就是大杀器,没原创 2016-11-18 17:24:02 · 9003 阅读 · 0 评论 -
提升page.js路由效率的几个方法
1. 必须启动路由服务注册完路径后,必须要启动路由服务,才能监听浏览器地址变化,如下:page.base("/baseUrl/")page("exit", function() { alert('exit')})// 必须执行,才能监听浏览器地址的变化page.start()2. 动态注册路由地址在page.js手动启动路由服务后,还支持继续注册动态路由,这在权限验证中作用非常突出原创 2016-11-18 17:26:59 · 5924 阅读 · 0 评论 -
Windows平台.gitignore文件无效的解决方法
不希望把node_modules文件提交到仓库中,于是在.gitignore添加了如下规则。node_modules/但运行”git status”,却总发现该死的node_modules文件夹总出现在untracked文件里,如下:our branch is ahead of 'origin/master' by 4 commits. (use "git push" to publish yo原创 2016-11-21 15:33:41 · 3550 阅读 · 4 评论 -
解决“requires a Promise polyfill in this browser”错误
在IE 9上使用Vuex的过程中,出现如下错误:SCRIPT5022: [vuex] vuex requires a Promise polyfill in this browser. 解决办法如下: 从babel的官方网站下载babel-polyfill,安装到WEB应用的头部即可轻松解决问题,并能支持ES6所有的新方法。 $ npm install --save-dev babel-原创 2016-11-25 10:58:49 · 10443 阅读 · 0 评论 -
在MinGW启动时激活环境变量
熟悉Linux的都知道,在进入SHELL时,一共有四种方式添加环境变量与添加自定义命令,如下: 文件位置 用途 优先级 补充说明 /etc/profile 通用环境信息,首用户登录执行 1 会从/etc/profile.d目录件中搜集shell的设置 /etc/bashrc 通用环境信息,每个用户登录时执行 2 暂无 ~/.bash_profile原创 2017-12-19 22:00:49 · 1473 阅读 · 0 评论