-
今年的目标
今年的目标很简单,如下几条:1.学习分布式,然后学习使用`hadoop`。2.深入学习`NoSQL`数据库,主要为`MongoDB`和`Redis`,掌握基本的操作命令。3.熟练掌握IO,多线程,服务端等等一些技术。4.把小黄书网站的交谈功能做出来。发现一张不错的图片:![Java学习](//static.acgist.com/resources/images/article/201603/14574892376511002.png)>来源:[http://www.jianshu.com/p/5b0f90cd445d](http://www.jianshu.com/p/5b0f90cd445d)
目标 -
Spring问题总结
`Spring`注入的`bean`默认为单例,但是如果单例`bean`注入一个非单例的`bean`不能使用`resource`注入,而要是用个`getBean`:```javaContextLoader.getCurrentWebApplicationContext().getBean("beanName");````Spring`仅单例的`bean`能执行销毁方法`destroy-method`。实现`init`和`destory`有三种方法:*注解`@PostConstruct`和`@PreDestroy`*`xml`配置`init-method`和`destory-method`*`bean`实现`InitializingBean`和`DisposableBean`接口>注:`destory`好像不能对数据库数据进行操作,如果需要操作数据库最好使用监听器,而且测试最好不要用Eclipse配置的Tomcat测试。错误`java.lang.ClassCastException:com.sun.proxy.$Proxy51cannotbecastto`是因为`getBean`的时候要强转为接口。
Spring -
PDF修改
最近遇到一个需要修改PDF的问题,但是发现中文支持非常糟糕,而且网络上的代码都是同一个例子,这个例子里面有些分段的字符串是不能替换的。[https://svn.apache.org/repos/asf/pdfbox/tags/1.5.0/pdfbox/src/main/java/org/apache/pdfbox/examples/pdmodel/ReplaceString.java](https://svn.apache.org/repos/asf/pdfbox/tags/1.5.0/pdfbox/src/main/java/org/apache/pdfbox/examples/pdmodel/ReplaceString.java)源代码看起来也是一头包,暂时写了点在下面,以后有时间优化一下看看吧。>使用版本`pdfbox-1.8.10````javapublicstaticvoidmain(String[]args){replacePDFContentStr("e://test.pdf","13888888888","admin@acgist.com");}publicstaticvoidrepla...
PDF PDFBox -
教程网站
说到教程网站,自然不能不提到W3CSchool,好东西值得拥有好吧。地址:[http://www.w3school.com.cn/](http://www.w3school.com.cn/)当然这个网站东西更多一些,菜鸟教程,学的不是技术,更是梦想好吧。地址:[http://www.runoob.com/](http://www.runoob.com/)
文档 w3cschool 教程 -
HTTPS学习笔记
上次发现一个免费的SSL证书,而且Google浏览器显示绿锁图标,于是忍不住搞了一下HTTPS的东西。如果网页地址使用了HTTPS,那么静态资源也要使用,否者提示错误:```MixedContent:Thepageat'https://www.acgist.com/'wasloadedoverHTTPS,butrequestedaninsecurestylesheet'http://static.acgist.com/resources/css/style.css'.Thisrequesthasbeenblocked;thecontentmustbeservedoverHTTPS.```不过图片`img`不会提示错误,但是绿锁会消失。还有最好静态资源不要加`http:`或者`https:`,而是直接使用`//`开头,例如:```html```这样浏览器会自动判断是HTTP还是HTTPS。>20220624批注以前一致以为HTTPS所有资源都是使用RSA加密的,后来发现原来RSA加密只是用来传递对称加密密钥的,文件传输的时候还是使用对称加密算法。
SSL HTTPS -
HTTPS证书免费申请
发现一个不错的免费证书的网站,而且是浏览器地址带绿色的,申请地址:[http://www.wosign.com/Products/free_SSL.htm](http://www.wosign.com/Products/free_SSL.htm)现在改用阿里云的免费证书服务:[https://common-buy.aliyun.com/?commodityCode=cas#/buy](https://common-buy.aliyun.com/?commodityCode=cas#/buy)
证书申请 免费证书 HTTPS -
Chrome浏览器插件开发
今天看了篇不错的文章,就是将Chrome地址栏转化为二维码的文章:[http://my.oschina.net/tearlight/blog/369013](http://my.oschina.net/tearlight/blog/369013)于是有了一个不错的想法,做一个`12306`的抢票插件,当然有时间再来搞起。开发文档地址:[http://open.chrome.360.cn/extension_dev/overview.html](http://open.chrome.360.cn/extension_dev/overview.html)>20220624批注现在Chrome浏览器默认自带了地址栏转二维码的功能了。
Chrome 浏览器插件 -
logback配置忽略日志
一直用`log4j`,最近使用百度的云存储,用到了`logback`,但是有个`info`日志实在是让人受不了:```17:36:38.118[http-nio-8080-exec-83]INFOcom.baidubce.http.BceHttpClient-UnabletoexecuteHTTPrequestcom.baidubce.BceServiceException:Thespecifiedkeydoesnotexist.(StatusCode:404;ErrorCode:NoSuchKey;RequestID:48c1e2c3-b159-4085-b0bc-033bcdb27de3)atcom.baidubce.http.handler.BceErrorResponseHandler.handle(BceErrorResponseHandler.java:51)~[bce-java-sdk-0.9.1.jar:na]```就是删除不存在的`object`的时候,日志里面一堆的错误信息。怎么过滤这个日志呢?我开始想的是能不能过滤掉这个异常`com.baidubce.BceServiceExceptio...
logback 日志 -
PHP错误
错误信息:```PHPWarning:PHPStartup:ftp:UnabletoinitializemoduleModulecompiledwithmoduleAPI=20131226PHPcompiledwithmoduleAPI=20090626TheseoptionsneedtomatchinUnknownonline0```这个是因为`phpize`的版本和当前的`php`版本不一致,我们最好直接使用`phpize`,而不是加上路径。
PHP phpize -
Eclipse优化以及配置
如果找不到可以直接搜索关键词(括号内的单词)。##关闭拼写检查(spelling)>Window->Preferences->General->Editors->TextEditors->Spelling![Eclipse拼写检查](//static.acgist.com/resources/images/article/201808/15354255574221001.png)##编码优化(encoding)>修改配置较多,使用搜索比较方便。##显示内存使用(heap)>Window->Preferences->General->Showheapstatus##关闭校验(validation)>修改配置较多,使用搜索比较方便。##字体优化(font)>Window->Preferences->General->Appearance->ColorsandFonts->Basic(改为中欧字符)##关闭动画>Window->Preferences->General->Appeara...
Eclipse -
Eclipse配置Tomcat
我们使用Eclipse配置Tomcat的时候,总是修改文件后,Tomcat就自动重启了。其实Eclipse经常出现这个问题,最近我自己配置了一下,暂时没发现什么问题:首先修改配置文件的内存:![Eclipse配置Tomcat内存](https://static.acgist.com/resources/images/article/201511/14483566286501003.png)然后修改`server.xml`,去掉`autoDeploy`和`reloadable`:![Eclipse配置Tomcat](https://static.acgist.com/resources/images/article/201511/14483566670801004.png)
Eclipse Tomcat PermGen space -
browserconfig.xml
最近看服务器访问日志,看到好多`404`都是请求的`browserconfig.xml`文件,最后百度了一下,原来是IE最新的浏览器的一些功能。是配置Window8.1以上系统的开始菜单的,好像还可以配置一些通知信息,挺不错的东西,可惜是IE上面的东西。>具体配置参考:[https://msdn.microsoft.com/library/dn455106(v=vs.85).aspx](https://msdn.microsoft.com/library/dn455106(v=vs.85).aspx)
browserconfig.xml -
Linux find regex
Linux的`find`命令真是非常强大的命令。以前都是用通配符的,但是最近有些东西通配符已经不能解决了,所以用到了正则表达式,但是发现每次使用的时候都找不到文件:```bashfind./-regex'acgist\.log.*'```![findregex](https://static.acgist.com/resources/images/article/201510/14461740884631001.png)这是为什么了,机智的我总能发现问题,我们使用`find`命令的时候会发现找到的文件名都是**./文件名**的格式的,所以应该这样写:```bashfind./-regex'\.\/acgist\.log.*'```![findregex](https://static.acgist.com/resources/images/article/201510/14461741989921002.png)当然上面还有一种`.*acgist\.log.*`的也可以。
Linux find regex 正则表达式 -
MySQL INTO OUTFILE和LOAD DATA INFILE
有时候为了方便拿到数据,会使用一些工具来转移数据,但是这样非常慢,使用MySQL自带的工具效率会高很多。下面就给一个文件来转移数据的例子,当然数据很多可以使用`mysqldump`命令更快。```sqlselectid,name,infofromxx_memberwherecreate_date>'2015-10-01'INTOOUTFILE"/data.txt"FIELDSTERMINATEDBY','LINESTERMINATEDBY'\n';```然后load到数据库:```sqlLOADDATAINFILE'E://company/data.txt'INTOTABLExx_memberFIELDSTERMINATEDBY','LINESTERMINATEDBY'\n'(id,name,info);```>这里要注意的就是后面`load`到数据库的时候,列的位置不是跟在表后面,而是放在最后面的。
INTO OUTFILE LOAD DATA INFILE MySQL -
xargs带有空格名称解决办法
我们一般使用`find`和`xargs`两个命令完成一些功能,但是今天发现如果包含有空格的文件却会提示:```未匹配的单引用;默认情况下,引用是针对xargs的,除非您使用了-0选项```直接上解决办法:原命令:```bashfind/home/test/-name"*.text"-mtime+2|xargsls-lh```修改为:```bashfind/home/test/-name"*.text"-mtime+2-print0|xargs-0ls-lh```>参考文章:[http://blog.chinaunix.net/uid-7242899-id-2060739.html](http://blog.chinaunix.net/uid-7242899-id-2060739.html)
xargs -
UEditor表格无边框
最近改用UEditor,一连串悲催的故事就发生了。今天就遇到了表格无边框的问题。当然百度有很多解决办法,但是我用的这个版本好像都没用,因为这个SB玩意把边框样式写到了CSS里面。![UEditor](https://static.acgist.com/resources/images/article/201510/14442925236891013.png)解决办法两个:1.直接把样式写到前台CSS里面2.改JS咯,搜索`c.push('20220623批注现在改成了Markdown写文章了,感觉富文本编辑器里面的标签比较乱,Markdown生成HTML比较好控制。
UEditor -
Grunt编译UEditor
最近把公司网站的编辑器换了一下,原来的有点渣,换用百度的`UEditor`,但是发现百度官网的下载包有BUG(预览图片的时候路径是本地路径)。我还在想这么严重的问题百度居然不修复,原来百度早已经把源代码放到了`github`上面去了。下载源代码发现根本不是那么回事情,不得不说现在的前端也是折腾的厉害啊,什么自动化测试、编译,还要学习([http://www.gruntjs.net/](http://www.gruntjs.net/))。*首先从github上面下载代码下来*然后安装node.js*然后安装grunt插件*最后编译就OK了具体命令:```javascriptnode--versionnpminstall-ggrunt-clinpminstallgrunt--save-devnpminstallgrunt```>参考文章:[http://www.cnblogs.com/linjiqin/p/3754771.html](http://www.cnblogs.com/linjiqin/p/3754771.html)结果如下图:![Grunt编译UEditor](https://static.ac...
Grunt UEditor Node.js -
Chrome Workspace修改本地CSS
前端一般都喜欢使用Chrome的控制台来修改CSS,这样可以马上看到效果,但是改了需要再修改CSS文件,这样非常麻烦。其实Chrome提供了一个非常不错的功能,修改样式的同时帮你把本地文件也修改稿了,简直不要太帅,下面给出设置方法:##打开控制台点击设置![Chrome控制台](https://static.acgist.com/resources/images/article/201509/14425424766751001.png)##选中Workspace![选中Workspace](https://static.acgist.com/resources/images/article/201509/14425424772641002.png)##选择你的Workspace目录![选择你的Workspace目录](https://static.acgist.com/resources/images/article/201509/14425426786511007.png)##设置folder的属性设置映射文件,可以映射本地文件,也可以映射`http://xxxx`文件,但是目录的层级要一样。![映射文件]...
Chrome Workspace -
中文分词
下面是一个中文分词算法,只有片段,完整例子请在后面下载完整代码:```javapackagecom.acgist.nlp.query.analyzer;importjava.util.ArrayList;importjava.util.List;importorg.apache.commons.lang.StringUtils;/***分词器*注意词典必须有序排放*/publicclassAnalyzer{privatechar[]chars;//字符串分割privateintindex=0;//分词序号privateintmatchIndex=0;//已经匹配的长度privateStringcontent;//原始句子privatebooleanmaximize;//是否最大分词privateListtokens;//分解出来的词语publicstaticfinalStringREGEX_BLANK="\\s";publicstaticfinalStringREGEX_NUMBER="[0-9]";publicstaticfinalStringREGEX_LETTER="[a-zA-Z]";publicst...
中文分词 -
StringBuffer小细节
以前每次说到使用`StringBuffer`来拼接字符串,但是当使用`toString`的方法时要小心。例如下面的代码:```javapublicstaticvoidmain(String[]args){StringBufferbuffer=newStringBuffer();longbegin=System.currentTimeMillis();for(inti=0;i<1000*10000;i++){if(buffer.toString().equals("bb")){}}longend=System.currentTimeMillis();System.out.println(end-begin);begin=System.currentTimeMillis();Stringvalue=buffer.toString();for(inti=0;i<1000*10000;i++){if(value.equals("bb")){}}end=System.currentTimeMillis();System.out.println(end-begin);}```如果每次比较的时候都去调用`toS...
StringBuffer