zoukankan      html  css  js  c++  java
  • 创业过程中的63个技术问题



    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


    controlindex.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="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; 
  • 相关阅读:
    2018-2019-20172329 《Java软件结构与数据结构》第八周学习总结
    2018-2019-20172329 《Java软件结构与数据结构》第七周学习总结
    20172324 2018-2019-1《程序设计与数据结构》课程总结
    选择困难症的福音——团队Scrum冲刺阶段-Day5(补发 那天csshow)
    IG—金字塔
    选择困难症的福音——团队Scrum冲刺阶段-Day 7
    选择困难症的福音——团队Scrum冲刺阶段-Day 4
    哈夫曼编码测试
    选择困难症的福音——团队Scrum冲刺阶段-Day 3
    选择困难症的福音——团队Scrum冲刺阶段-Day 2
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463190.html
Copyright © 2011-2022 走看看