1.Eclipse Marketplace搜索Hibernate,比较靠前的位置有“Hibernate Tools”,使用代码自动生成,提升开发效率! 须要选择正确的版本,我用的是Indigo! Eclipse插件:Hibernate Tools安装以后,没有找到自动生成代码的菜单。 只好在Myeclipse下使用,而后再拷贝到工程中。 遇到一个问题,建立工程时,须要先“增长对Hibernate的支持”,而后才能生成代码,要否则没法选择SrcFolder! 2.把Java Web项目部署到Tomcat的根目录。 项目--右键--属性--项目属性里面找到一个 web project setttings选项菜单,里面有一个context root能够设置`````` 3. <!-- Properties文件读取配置,*.properties --> <context:property-placeholder location="classpath*:*.properties" /> <!-- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:*.properties</value> </list> </property> </bean> --> <!-- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:*.properties</value> </list> </property> </bean> --> 4.SpringMVC后端只能接收到get方式发送的请求参数,没法接收到post。 @RequestParam @RequestBody 5.调整iframe高度 <iframe id="frm_footer" name="frm" src="<s:url value='/common/footer.jsp'/> " frameborder="0" height="750px" scrolling="no" width="100%" style="height:750px;"></iframe> ie8和Firefox怎么都不支持iframe的height字段??? 经过style="height:700px"设置有效。 6.$.ajax({ url : this.dataSource, data : this.params && JSON.stringify(this.params), contentType : "application/json", type : this.method || 'POST', dataType : 'json', context : this, success : function(data){fill(that, data);}, error : this.onerror }); 设置了 contentType : "application/json",使用SpringMVC的@RequestBody才能接收到参数,而不是@RequestParam。 不设置这个参数,使用@RequestParam。 7.直接使用addEntity(java.util.Map.class) 使用的原生sql查询 SQLQuery sqlQuery = doCreateSQLQuery(sql); if (clazz != null) { sqlQuery.addEntity(clazz); } 没法查询 经过下面的方式是能够的sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); 这种方法为何不行呢?? sqlQuery.setResultTransformer(Transformers.aliasToBean(clazz)); String sql = "select count(*) as count,create_time as createTime from " + tableName + " group by create_time order by create_time desc"; return getDao().sqlList(sql, Fans.class); public class Fans { private Integer count;//必须定义为“BigInteger”,不然会报错(太难发现了啊) private Date createTime; } org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of cn.coderzone.admin.Fans.count at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:128) at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:91) at org.hibernate.hql.HolderInstantiator.instantiate(HolderInstantiator.java:96) at org.hibernate.loader.custom.CustomLoader.getResultList(CustomLoader.java:361) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) at org.hibernate.loader.Loader.list(Loader.java:2271) at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316) at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842) at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157) at cn.coderzone.admin.dao.base.BaseHqlDao.doQuery(BaseHqlDao.java:280) at cn.coderzone.admin.dao.base.BaseDao.sqlList(BaseDao.java:23) at cn.coderzone.admin.service.BaseService.countByDay(BaseService.java:117) at cn.coderzone.admin.service.BaseService$$FastClassByCGLIB$$55a6ed4c.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631) at cn.coderzone.admin.service.ArticleService$$EnhancerByCGLIB$$39dcde90.countByDay(<generated>) at cn.coderzone.admin.test.service.ArticleServiceTest.testArticleCountByDay(ArticleServiceTest.java:33) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.IllegalArgumentException: argument type mismatch at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:66) ... 51 more 8.HQL语句没法执行更新,可是能够执行查询!! update Article set status=:status and updateTime=:updateTime where id=:id Spring和Hibernate注解、事务等配置项,顺序不对,致使没法执行,可是具体为啥不对,殊不知道。 又一个坑爹的问题! 9.在Hibernate中能够利用@DynamicInsert和@DynamicUpdate生成动态SQL语句,即在插入和修改数据的时候,语句中只包括要插入或者修改的字段。 10.为了减小代码重复率,st-grid默认按照id降序。 可是有的统计页面,根本不存在id字段,必须手动指定排序字段,“覆盖默认的”! 这种统计页面必须指定“排序字段”,挺奇怪的。 最终改成,在前端指定排序字段。 11.JavaScript写的代码,常常会遇到浏览器兼容性问题。 仍是应该用Jquery等第三方框架比较合适! 12.JQuery与JavaScript。 a.2个相同的jquery对象,直接使用 == ,返回false。 用attr('id')比较,比较合适。 ul.children('li').each(function(i){ if($(this).attr('id')==id){ //这里的this应该也是JavaScript对象,使用$以后是Jquery对象 $(this).css("background-color","black"); }else{ } }); b.区分Jquery对象和JavaScript对象 var liList=ul.children('li'); for ( var i = 0; i < liList.length; i++) { //致使liList[i]元素是JavaScript对象,而不是jquery对象,没有attr方法 var li = $(liList[i]); } 13.联表查询时参数的冲突应该由前端来设置!!!(前端就和业务紧密相联) 14.64位JDK,64位Eclipse http://aquilo.diandian.com/post/2012-05-27/21832516 15.nodejs的文件编码为GBK,致使Express接收的参数为乱码。 16.mysql的配置,charset设置为“utf8”会报错。 nodejs中的mysql链接参数中,编码参数与 Java中的mysql不同。 “ charset : The charset for the connection. (Default: 'UTF8_GENERAL_CI' . Value needs to be all in upper case letters!)” mysqldb:{ username:"root", password:"lw198962", database:"itfriend", host:"192.168.0.12", port:3306 }, https://github.com/felixge/node-mysql 17.nodejs运行过程当中,不能使用SmartSVN等SVN软件进行更新,会报错。 18.有的政府网站很是坑爹,注册表单的验证码区分大小写。 19.百度加速乐真心不给力 使用以后,域名常常没法解析。 阿里云频繁发出 监控报警,1天要收到好几条短信。 “您的域名没法访问,您的域名恢复了”。 烦死了! 20.update article_category set name =:name, update_time =now() where id=:id 错误的写法:update article_category set name =:name and update_time =now() where id=:id 让人蛋疼的是,上面的update方法不会报错,只是没有更新成功而已 21.JS中,0也为false。 期待结果:若是status的值为null,或者status未定义,修改status的值。 //有问题 var data={status:0}; data.status=data.status||1; //正确 var data={}; (data.status== null)&&(data.status=1) 22.nodejs 查询方法,至少返回{}数组,增长方法返回insertId 23.Nodejs批量插入 insert into article_tag(name) values("tag"),("tag2"); 拼接values值 MySQL支持,其它数据库不必定支持“非标准”SQL语法。 async each tags =[{userId:article.userId,articleId:result.insertId,name:"tag5"}]; async.each(tags, ArticleTagDao.add, function(err){ // if any of the saves produced an error, err would equal that error }); 24.级联查询1篇文章的“评论数”、“赞数”、“踩数” select * from (select a.*,count(ac.article_id) as commentCount from article a left join article_comment ac on a.id = ac.article_id where a.user_id=1 group by a.id) A left join (select a.id,count(am.type) as likeMarkCount from article a left join article_mark am on a.id = am.article_id where type = 1 group by a.id) B on A.id = B.id left join (select a.id,count(am.type) as unlikeMarkCount from article a left join article_mark am on a.id = am.article_id where type = 2 group by a.id) C on C.id = A.id limit 0,10 25.偷懒,不记住URL,总期望着复制-粘贴,QQ发送 26.sql-count的 indexOf(' from '),from的左右必须有1个空格。 var fromIndex = sql.indexOf(' from '); var countSql = 'select count(*) as totalCount' + sql.substring(fromIndex); 普通的sql语句 var sql="select * from article";必定能够 子查询sql右边,能够不要空格,为了使用Pager组件,增长空格 var sql ="select * from(select id,title,create_time from topic) A "; 27.app.use(express.session({ cookie:{ maxAge : 2*60*1000(2分钟,而不是20分钟,cookie的单位是毫秒) }, store:redisStore, secret:settings.cookieSecret })); 28.result为[]空数组,result[0]不会报错,可是在使用result[0].password会报错 UserDao.getByEmailAndAccount(data,function(err,result){ console.log(JSON.stringify(result)); if(err) return callback(err); callback(err,result[0]); -------------优化工做------- 查询有必要查询的字段,而不是select * var finalResult=result[0] || {};(null值判断) var db = null; var dbConfig = settings.mongodb; var uri = 'mongodb://' + dbConfig.host + ':' + dbConfig.port + '/' + dbConfig.database db = mongoose.createConnection(uri,{server:{poolSize:dbConfig.poolSize}}); db.on('error',function(err){ winston.error("mongodb connection,error"); }); (使用链接池和不使用链接池,绑定事件的对象不同,不使用链接池的方式mongoose.connection.on('error',fun) Mongodb防火墙,致使没法远程访问 29.JS只有函数做用域,没有块做用域!!! 变量重名,容易被“覆盖”! 30.routes里,不该该直接用 字符串保存json,而是用var json={},而不是 var json=""; jquery的post“很慢”,局域网发送须要1125ms,使用本身写的JS封装的POST组件,只须要215ms。 31.当即返回结果。消息通知继续执行,不须要等待其返回。 exports.add=function(data,callback){ MessageDao.add(data,function(err,result){ callback && callback(err,result); if(err)return; var notify=[]; //通知空间做者 if(data.fromUserId != data.toUserId){ var notifyUser={fromUserId:data.fromUserId,toUserId:data.toUserId,type:NotifyType.MESSAGE,resourceId:data.topId,title:data.title}; notify.push(notifyUser); } //通知被回复的人 if(data.refUserId && data.refUserId != -1 && data.refUserId != data.fromUserId){ var notifyRefUser={fromUserId:data.fromUserId,toUserId:data.refUserId,type:NotifyType.MESSAGE_COMMENT,resourceId:data.topId,title:data.title}; notify.push(notifyRefUser); } NotifyDao.batchAdd(notify); }); }; 32.重复的get函数,下面的会覆盖上面的。 33. //1.统计积分 caculateScore(function(err,scoreArray){ //new Date() == 2014-04-25 09:11:00 765512 (带上了毫秒) var currentTime = DateUtils.toYMDHDS(new Date()); //2.保存新的积分 ScoreUpdate.insertScore(scoreArray,function(err,result){ var deleteOldScoreSql ="update user_score_grade set status =:status,delete_time = now() where create_time < :currentTime"; var data ={status:Status.DELETED,currentTime:currentTime}; //3.删除旧的积分 BaseDao.queryWithTransaction(deleteOldScoreSql,data,function(err,result){ callback&&callback(err,result); }); }); }); 当前时间:2014-04-25 09:11:00 765512 新插入积分的时间是:currentTime 2014-04-25 09:11:00 须要删除的积分时间:create_time 小于 currentTime insertScore方法执行的时候,create_time应该已经大于currentTime,不会被删除。 因为insertScore的时间是 2014-04-25 09:11:00(若是带上毫秒,应该是2014-04-25 09:11:00 800) 没有毫秒,因此 2014-04-25 09:11:00 <2014-04-25 09:11:00 765 这个问题,在数据量很小,执行速度很是快的时候,会出现。 解决方法:时间格式统一,都不要毫秒。 34. 数据库id起始大小 alter table zone AUTO_INCREMENT=100001; 35. Bootstrap的Modal对话框组件,与form一块儿使用的时候,按Enter会致使页面刷新,Bug! 36. 互动百科PHP兼容性 http://kaiyuan.hudong.com/bbs/viewthread.php?tid=116485&extra=&page=1 control\index.php文件的开头,找到相似的代码,修改对应的代码为描红部分,即: 将$this->base( & $get, &$post); 修改成$this->base( $get,$post); 37.延迟初始化和初始化这次,节省时间! JavaWeb开发,Spring框架,默认是@Service和@Repository默认都是单例而且当即初始化。 可是我发现构造函数执行了2次。 根据个人理解,若是ArticleService不使用接口的方式,那么须要CGLIB的库,生成1个加强的类。 所以,执行2次。 若是有接口ArticleService implements IArticleService; @Autowired private IArticleService articleService; 没有接口 @Autowired private ArticleService articleService; @Service @Lazy(true) public class ArticleService {} 使用@Lazy(true)能够延迟初始化1个类。 Java程序,尤为是Spring最麻烦的地方是,系统启动时间实在是太长了,Tomcat部署初始化之类的过程,至少要10s。 平均在20s。 而node.js只须要2s。 延迟初始化的坏处是,系统启动的时候,有的错误不能及时发现。 Dao不管是否延迟初始化,都初始化了1次,难道是Dao,不管是否使用接口,都不须要使用CGLIB加强。 若是全部的Service都使用了延迟初始化,Dao不设置,那么使用@Repository标记的Dao,仍是会初始化, 除非也使用@Lazy(true)标记。 Service和Dao所有使用延迟初始化后,发现启动时间减少了不到1s,唉,大部分时间仍是花在了部署上了。 仍是去掉@Lazy(true),只当是研究1个问题了。 38. JQuery根据元素的class选择至少有2种方法 $("div.page-node").remove(); $("div[class='page-node show']").remove(); <div class="page-node show"></div> 使用div[class='page-node show'],必须是“全等”,若是只是class='page-node',是选择不到的。 39. Mysql备份。 之前,使用Windows系统,每次更换数据库,都是mysqldump数据库成sql文件备份, 如今其实有更好的方法,把Mysql的数据目录,迁移到D盘,下次更换数据库,只须要更换mysql数据库的datadir配置就行了。 40.Spring中的一些提醒 私有方法,没有执行sql语句,事务没有起做用。 下面这篇总结很好。 参考资料:http://hi.baidu.com/coolwork/item/593855c6131a0bcf994aa0ff 41.Mysql没法启动或者常常挂。 阿里云服务器512MB内存(为了省钱,内存很低) 默认状况下,mysql的max_connections是150,致使须要的内存很是高。 当mysql占居内存达到80%左右的时候,会被操做系统kill。 下面是个好网站:http://www.mysqlcalculator.com/ 计算mysql须要使用多少内存,真是先进呀 42.X-UA-Compatible http://www.cnblogs.com/nidilzhang/archive/2010/01/09/1642887.html 43.textarea设置值 <textarea id="remark" style="width:100%" placeholder="写几句,介绍下本身吧" maxlength="250"><%= user.remark != null?user.remark:''%></textarea> textarea没有value属性 Eclipse下编辑有警告,而Sublime没有。 44.QQ浏览器下-上传头像,会出现下载对话框 返回数据不能用JSON。 res.set('Content-Type', 'text/plain'); 45.目录和文件取名的不一样 Linux下,这是一个文件 scoreTmpFile:"/var/www/scoregrade/upload/score", 而Windows下C:/upload/score是一个目录,有个后缀就是文件了C:/upload/score.txt 47. 若是在启动warning: World-writable config file /home/mysql/my.cnf is ignored 缘由:my.cnf的读取权限进行了设置,不容许World-writable(字面意思是全世界均可读写) 解决方法: sudo chmod 644 /home/mysql/my.cnf 参考资料:http://www.cnblogs.com/ylan2009/archive/2012/02/25/2368027.html 48.Ubuntu下完全卸载mysql sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt-get autoremove mysql-server sudo apt-get remove mysql-common (很是重要) 49. 又拍云配置图片白名单:www.itfriend.cn会致使不带www访问,itfriend.cn的图片没法打开,403forbidden。 50.网上下载的Placeholder插件不给力。 /*;(function($) { $.fn.extend({ placeholder: function() { if ('placeholder' in document.createElement('input')) { return this } else { return this.each(function() { var that = $(this); var thatPlaceholder = that.attr('placeholder'); if(thatPlaceholder){ that.val(thatPlaceholder).focus(function() { if (that.val() === thatPlaceholder) { if(that.attr('realType')=='password'){ that.attr('type','password'); } that.val(''); } }).blur(function() { if (that.val().length === 0) { that.val(thatPlaceholder); if(that.attr('realType')=='password'){ that.attr('type','text'); } } }); if(that.attr('type') == 'password'){ that.attr('type','text'); that.attr('realType','password'); } } }) } } }) })(jQuery); $("input[type=text]").placeholder(); $("input[type=password]").placeholder(); $("textarea").placeholder();*/ 下面这个还不错,问题也是有的,咱们进行了定制和修复。 http://www.ifrans.cn/placehoder/ 51.修改头像失败 Z.getXiuXiuUploadUrl = function(){ var url= "http://localhost/data/user/modifyImg"; //必定要带www //path = "http://www.itfriend.cn/data/user/modifyImg"; return url; }; 错误症状:若是域名中,带有www,QQ浏览器能够修改头像,chrome失败; 不带www,QQ和chrome都成功。 最终诊断出缘由:"http://www.itfriend.cn/data/user/modifyImg";这个url若是不带www, 就有可能不能修改头像,出现403之类的错误。 这个可能和浏览器也存在必定的关系。 解决方案就是,这个url必定带上www,不管url的访问路径是否带了www。 52.图片没法访问。 http://www.itfriend.cn/user/fansunion/photo fansunion小写,访问不到又拍云的图片。 FansUnion大写才行。 hname应该使用数据库中保存的user.name,而不是从url参数中解析出来的name。 53.展现html的须要xss, 展现纯文本的须要转义。 54.ueditor修改编辑器的默认字体大小 //ueditor.all.js 6708行 //设置默认字体和字号 //font-family不能呢随便改,在safari下fillchar会有解析问题 'body{margin:8px;font-family:sans-serif;font-size:14px;}' + 55.为防止xss攻击,对html内容进行了处理。 结果,把某个合法的内容给过滤了。 56.查看本身的积分排名。 转化下:有多少我的的分数大于等于本身的分数,就是本身的排名。 select name,nickname,image,total_score,( select count(*) from user_score_grade where total_score>= (select total_score from user_score_grade where user_id = 16 and status=0 order by total_score desc limit 1) and status=0) as rank from user_score_grade usg left join user u on u.id = usg.user_id where user_id = 16 and status =0; 57.nodejs中"__dirname"是当前文件所在的目录。 exports.croosdomain = function(req, res, next) { res.sendfile(__dirname+'/crossdomain.xml'); }; 上传图片须要配置跨域文件。 58.部署方式:源程序A,复制一份为B,覆盖B程序,把B做为A,减小系统“停机”时间。 (这种,会不会出现不一致的状况,在A运行的时候,产生了新的内容) 59.百度Social_uid值很大,int11位不够存储,改成bigint40。 60.发一份邮件,打印如下,至少知道哪些发送成功了。 emailSender.sendEmail(l, subject, content); System.out.println("mail:"+mail); 须要捕捉异常。 61. var sql="select u.id,name,image,email,remark,nickname,industry,company,career,school,major,degree_id,sex,usg.grade_num from user u "+ " left join user_score_grade usg on (usg.user_id=u.id and usg.status=:status) "+ " where u.id =:userId "; var sql="select u.id,name,image,email,remark,nickname,industry,company,career,school,major,degree_id,sex,usg.grade_num from user u "+ " left join user_score_grade usg on (usg.user_id=u.id ) "+ " where u.id =:userId and usg.status=:status"; “and usg.status=:status”放在 on后面和where后面,效果是不同的。 若是在where后面,若是usg没有这个用户,会找不到结果 62.停用百度跟踪,注重我的隐私 http://www.baidu.com/duty/safe_control.html 63.!important声明的样式优先级最高,若是冲突再进行计算。font-size:20px !important;