ThinkPHP3.2.2实现持久登录(记住我)功能的方法

本文实例讲述了ThinkPHP3.2.2实现持久登录功能的方法。分享给大家供大家参考,具体如下:

实现持久登录,即用户在登录时,勾选了"记住我"之后,无论是否关闭浏览器,只要不退出登录,在指定的时间内始终保持登录状态(缺点是在另一台电脑上登录过后,之前那台电脑就不能继续保持登录状态)。

首先,持久登陆使用 cookie 实现,但是 cookie 中不能保存用户密码这样重要的信息,即使加密过。解决方案是在用户登录表中新建3个字段identifier:第二身份标识,token:永久登录标识,timeout:永久登录超时时间。

+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| uid | int(11) | NO | PRI | NULL | auto_increment |
| uname | varchar(20) | YES | | NULL | |
| upwd | varchar(20) | YES | | NULL | |
| uflag | int(11) | YES | | NULL | |
| identifier | varchar(32) | YES | | NULL | |
| token | varchar(32) | YES | | NULL | |
| timeout | int(11) | YES | | NULL | |
+------------+-------------+------+-----+---------+----------------+

在用户勾选了"记住我"登录时,应该生成一个唯一的 identifier,一个唯一的 token,并且设置一个过期时间 timeout,把两个代表身份的值写入cookie,设置 cookie 过期时间为 timeout,例如:setcookie('auth',"$identifier:$token",$timeout); 同时把三个值插入数据表;当用户再一次访问网站时,首先判断 cookie 中是否含有 auth,如果含有,则去数据库中进行身份比对(identifier 和 token),比对成功时,把用户信息写入 session,同时用户保持登录状态。

代码:

控制器 TestController.class.php

checkLong();
  //已经登录则跳转至个人中心
  if(isset($_SESSION['username'])){
   $this->redirect('Test/ucenter');
  }else{
   //判断是否存在cookie
   if(isset($_COOKIE['username'])){
    $this->assign('username',$_COOKIE['username']);
   }
   //显示注册页
   $this->display("test");
  }
 }
 //显示验证码
 public function verifyImg(){
  $verify = new \Think\Verify();
  //$verify->useZh = true; //使用中文验证码
  $verify->length = 4; 
  $verify->entry();
 }
 //验证登录
 public function check(){
  $verify = new \Think\Verify();
  if($verify->check(I("yzm"))){
   //判断用户名密码
   $user = new \Test\Model\TestModel();
   $res = $user->checkName(I("username"),I("pwd"));
   if($res === false){
    echo "用户名或密码错误";
   }else{
    //用户信息存入session
    session("username",$res['uname']);
    session("id",$res['uid']);
    //如果用户勾选了"记住我",则保持持久登陆
    if(I("remember")){
     $salt = $this->random_str(16);
     //第二分身标识
     $identifier = md5($salt . md5(I("username") . $salt));
     //永久登录标识
     $token = md5(uniqid(rand(), true));
     //永久登录超时时间(1周)
     $timeout = time()+3600*24*7;
     //存入cookie
     setcookie('auth',"$identifier:$token",$timeout);
     $user->saveRemember($res['uid'],$identifier,$token,$timeout);
    }
    //把用户名存入cookie,退出登录后在表单保存用户名信息
    setcookie('username',I('username'),time()+3600*24);
    //跳转至会员中心
    $this->redirect('Test/ucenter');
   }
  }else{
   echo "输入错误";
  }
 } 
 //测试strstr函数
 public function strstrtest(){
  $param = "Think\Verify";
  //第三个参数为true,返回'Think';没有第三个参数,返回'\Verify'
  $name = strstr($param,'\\',true);
  echo $name;
 }
 //用户中心
 public function ucenter(){
  //判断是否永久登录
  $this->checkLong();
  $this->assign("session",$_SESSION);
  $this->display("ucenter");
 }
 //退出登录
 public function loginout(){
  session(null);
  setcookie('auth', '', time()-1);
  $this->redirect("Test/login");
 }
 //生成随机数,用于生成salt
 public function random_str($length){
  //生成一个包含 大写英文字母, 小写英文字母, 数字 的数组
  $arr = array_merge(range(0, 9), range('a', 'z'), range('A', 'Z'));
  $str = '';
  $arr_len = count($arr);
  for ($i = 0; $i < $length; $i++){
   $rand = mt_rand(0, $arr_len-1);
   $str.=$arr[$rand];
  }
  return $str;
 }
 //判断是否持久登录
 public function checkLong(){
  $check = new \Test\Model\TestModel();
  $is_long = $check->checkRemember();
  if($is_long === false){
  }else{
   session("username",$is_long['uname']);
   session("id",$is_long['uid']);
  }
 }
}

模型 TestModel.class.php

getByUname($name);
  if($info != null){
   //验证密码
   if($info['upwd'] == $pwd){
    return $info;
   }else{
    return false;
   }
  }else{
   return false;
  }
 }
 //当用户勾选"记住我"
 public function saveRemember($uid,$identifier,$token,$timeout){
  $admin = M("admin");
  $data['identifier'] = $identifier;
  $data['token'] = $token;
  $data['timeout'] = $timeout;
  $where = " uid = ".$uid;
  $res = $admin->data($data)->where($where)->save();
  return $res;
 }
 //验证用户是否永久登录(记住我)
 public function checkRemember(){
  $arr = array();
  $now = time();
  list($identifier,$token) = explode(':',$_COOKIE['auth']);
  if (ctype_alnum($identifier) && ctype_alnum($token)){
   $arr['identifier'] = $identifier;
   $arr['token'] = $token;
  }else{
   return false;
  }
  $admin = M("admin");
  $info = $admin->getByidentifier($arr['identifier']);
  if($info != null){
   if($arr['token'] != $info['token']){
    return false;
   }else if($now > $info['timeout']){
    return false;
   }else{
    return $info;
   }
  }else{
   return false;
  }
 }
}

视图 登录页 test.html




 
 Document






视图 个人中心 ucenter.html




 
 Documenttitle>
</head>
<body>
 <if condition="$session['username'] neq null">
 <i>{$session.username},</i>
 <else />
 <i>游客,</i>
 </if>
 欢迎您<br>
 <a href="__CONTROLLER__/loginout">退出登录</a>
</body>
</html>

</pre> 
 </div> 
 <p><strong>附:模块目录</strong></p> 
 <p><a href="http://img.e-com-net.com/image/info11/3017b9ed92c7448ea8cb414e3c666cac.jpg" target="_blank"><img alt="ThinkPHP3.2.2实现持久登录(记住我)功能的方法_第1张图片" src="http://img.e-com-net.com/image/info11/3017b9ed92c7448ea8cb414e3c666cac.jpg" width="270" height="548" style="border:1px solid black;"></a></p> 
 <p><strong>补充:<span style="color: #ff6600">小编在这里推荐一款本站的php格式化美化的排版工具帮助大家在以后的PHP程序设计中进行代码排版:</span><br> </strong></p> 
 <p><strong><span style="color: #0000ff">php代码在线格式化美化工具:</span></strong>http://tools.jb51.net/code/phpformat</p> 
 <p>更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。</p> 
 <p>希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。</p> 
 <div class="clearfix"> 
  <span id="art_bot" class="jbTestPos"></span> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1176608006012481536"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(ThinkPHP3.2.2实现持久登录(记住我)功能的方法)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1882251451699359744.htm"
                           title="AQ录制V1.7.8--录制工具安装与部署" target="_blank">AQ录制V1.7.8--录制工具安装与部署</a>
                        <span class="text-muted">你爱吃金坷垃吗</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6/1.htm">开源软件</a>
                        <div>文章目录一、AQ录制是什么?二、软件情况1.软件功能2.软件实测3.软是件安装配置三、下载地址一、AQ录制是什么?AQ录制软件是一款桌面录制软件,可以直播,录游戏,录网课,录教程,录素材,录课件,支持1080P全时长超清输出二、软件情况【软件功能】【录制】可以录制游戏高光时刻自动合并【视频编辑】可以对录制视频进行编辑【软件实测】【安装配置】下载安装包,解压后双击运行,出现安装向导界面,点击【Nex</div>
                    </li>
                    <li><a href="/article/1882251199613300736.htm"
                           title="【R语言】debug:run all 和 knit 有什么区别?" target="_blank">【R语言】debug:run all 和 knit 有什么区别?</a>
                        <span class="text-muted">tsumikistep</span>
<a class="tag" taget="_blank" href="/search/BME_%E7%94%9F%E7%89%A9%E5%8C%BB%E5%AD%A6%E5%B7%A5%E7%A8%8B/1.htm">BME_生物医学工程</a><a class="tag" taget="_blank" href="/search/%E6%9D%82%E8%AE%B0/1.htm">杂记</a><a class="tag" taget="_blank" href="/search/r%E8%AF%AD%E8%A8%80/1.htm">r语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>文章目录1.RunAll2.Knit具体区别示例使用`RunAll`使用`Knit`总结在R语言中,特别是在RMarkdown文档(.Rmd)中,RunAll和Knit是两个常用的执行代码的选项,但它们在功能和行为上有一些重要的区别。1.RunAll定义:RunAll是指在RMarkdown文档中运行所有代码块,但不生成最终的输出文档。用途:主要用于在开发过程中快速检查代码的执行情况,确保所有代码</div>
                    </li>
                    <li><a href="/article/1882250947351080960.htm"
                           title="【MWORKS】MWORKS 使用感想" target="_blank">【MWORKS】MWORKS 使用感想</a>
                        <span class="text-muted">tsumikistep</span>
<a class="tag" taget="_blank" href="/search/EE_MATLAB/1.htm">EE_MATLAB</a><a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                        <div>文章目录前言实验感想前言进行DSP实验实验感想遇到的问题:Julia编译失败,转用.m可能是设置的问题,julia脚本运行有点慢m文件编写时不显示无分号输出m文件无法像MATLAB一样分段有些函数不支持,不太好用说实话感想界面长得像VScode+matlab,可拓展性不如VScode个人比较喜欢有树状资源管理器的m文件软件认为现阶段最好还是精进matlab或者py,如果在前两者没有学得较好的情况下</div>
                    </li>
                    <li><a href="/article/1882250065280561152.htm"
                           title="CBK-D1-安全与风险管理-思维导图.md" target="_blank">CBK-D1-安全与风险管理-思维导图.md</a>
                        <span class="text-muted">青葱味奶糖</span>
<a class="tag" taget="_blank" href="/search/CISSP/1.htm">CISSP</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE/1.htm">思维导图</a><a class="tag" taget="_blank" href="/search/cissp/1.htm">cissp</a><a class="tag" taget="_blank" href="/search/osg/1.htm">osg</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E4%B8%8E%E9%A3%8E%E9%99%A9%E7%AE%A1%E7%90%86/1.htm">安全与风险管理</a>
                        <div>CBK-D1-安全与风险管理osg-ch2-人员安全和风险管理的概念人员安全人员经常被视为最脆弱的元素招聘新员工的步骤创建岗位描述岗位描述并非专用于招聘过程,在组织的整个生命周期中进行维护设置工作级别筛选应聘者候选人筛选背景调查#######工作和教育背景#######检查推荐信#######验证学历#######访谈同事#######个人面试#######信用核查#######性格测试和评估##</div>
                    </li>
                    <li><a href="/article/1882249813060284416.htm"
                           title="什么是僵尸进程" target="_blank">什么是僵尸进程</a>
                        <span class="text-muted">C嘎嘎嵌入式开发</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>什么是僵尸进程1.僵尸进程的定义僵尸进程是指那些已经终止执行(即已经调用了exit()或者完成了main()函数),但其父进程尚未通过wait()或waitpid()系统调用获取其退出状态的进程。在进程的生命周期中,当一个子进程结束时,它会将其退出状态信息(包括退出码、资源使用情况等)发送给其父进程。如果父进程没有及时读取这些信息,子进程就会变成僵尸状态。2.僵尸进程的生命周期创建阶段:父进程通过</div>
                    </li>
                    <li><a href="/article/1882249057452224512.htm"
                           title="Java 大视界 -- Java 大数据文本分析与自然语言处理:从文本挖掘到智能对话" target="_blank">Java 大视界 -- Java 大数据文本分析与自然语言处理:从文本挖掘到智能对话</a>
                        <span class="text-muted">一只蜗牛儿</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a>
                        <div>在当今的信息化时代,数据成为了重要的资源。特别是文本数据,随处可见,如社交媒体、新闻网站、技术文档、客户反馈等,这些都包含着大量的潜在信息。因此,如何从海量的文本中提取有价值的信息,成为了大数据分析领域的重要课题。Java作为一种高效、灵活的编程语言,在大数据文本分析与自然语言处理(NLP)中发挥着至关重要的作用。本文将介绍如何利用Java开发大数据文本分析和自然语言处理(NLP)应用,带领你从文</div>
                    </li>
                    <li><a href="/article/1882248301844164608.htm"
                           title="Spring---定时任务@Schedule的使用,及其参数使用yml或properties配置值" target="_blank">Spring---定时任务@Schedule的使用,及其参数使用yml或properties配置值</a>
                        <span class="text-muted">知北行</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>1.使用1.在spring的启动类上添加允许定时任务注解@EnableScheduling2.在要定时执行的方法上添加注解:@Scheduled(fixedRate=5000)//任务每隔5秒执行一次或@Scheduled(fixDelay=5000)//任务每隔5秒执行一次(上一次任务结束5秒后,再执行下一次任务)或者可以使用cron表达式来完成更复杂的定时要求.2.使用yml或properti</div>
                    </li>
                    <li><a href="/article/1882247923782184960.htm"
                           title="省级金融发展水平数据(2000-2022年)-社科数据" target="_blank">省级金融发展水平数据(2000-2022年)-社科数据</a>
                        <span class="text-muted">泡芙萝莉酱</span>
<a class="tag" taget="_blank" href="/search/%E7%A4%BE%E7%A7%91%E6%95%B0%E6%8D%AE/1.htm">社科数据</a><a class="tag" taget="_blank" href="/search/%E9%87%91%E8%9E%8D/1.htm">金融</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BA%E6%96%87/1.htm">毕业论文</a>
                        <div>省级金融发展水平数据(2000-2022年)-社科数据https://download.csdn.net/download/paofuluolijiang/90028592https://download.csdn.net/download/paofuluolijiang/90028592金融发展水平是衡量一个国家或地区经济实力和国际竞争力的重要指标,它反映了金融体系的成熟程度和发展水平。这一指标</div>
                    </li>
                    <li><a href="/article/1882247797567188992.htm"
                           title="Qt调用网易云API获取歌词等接口" target="_blank">Qt调用网易云API获取歌词等接口</a>
                        <span class="text-muted">overwriter</span>
<a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>简介前段时间想用Qt做一个歌词处理的小工具,需要从网易云下载歌词;之前已经有大佬用node.js实现了网易云的API集合,但是Qt调用的话需要再走一次网络请求,管理起来有点麻烦,因此用Qt重写了一个网易云API库QCloudMusicApi。这里讲一下如何使用QCloudMusicApi库获取歌词以及调用其他接口。可参考文档API参考目录需求和依赖使用说明需求和依赖Qt5.12+使用说明新建项目新</div>
                    </li>
                    <li><a href="/article/1882247293541871616.htm"
                           title="大文件分块上传.断点续传.秒传" target="_blank">大文件分块上传.断点续传.秒传</a>
                        <span class="text-muted">我是奶龙!我是奶龙!我是奶龙!</span>
<a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a>
                        <div>大文件分块上传分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。分片上传适用场景1.大文件上传2.网络环境环境不好,存在需要重传风险的场景分片上传的基本流程图1.将待上传文件按照一定大小进行分片。2.使用InitiateMultipartUpload接口初始化一个分片上传任务</div>
                    </li>
                    <li><a href="/article/1882247041300623360.htm"
                           title="redis 布隆过滤器 BloomFilter" target="_blank">redis 布隆过滤器 BloomFilter</a>
                        <span class="text-muted">稚辉君.MCA_P8_Java</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%8F%AF%E7%94%A8Kubernetes%E9%9B%86%E7%BE%A4/1.htm">高可用Kubernetes集群</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                        <div>文章目录1、什么是布隆过滤器?1.1工作原理1.2布隆过滤器的优点1.3缺点2、布隆过滤器的使用场景3、布隆过滤器的原理3.1布隆过滤器的数据结构3.2初始化阶3.3插入元素过程3.4查询元素是否存在3.5元素删除3.6扩容4、SpringBoot整合布隆过滤器4.1技术选型4.2依赖4.3配置布隆过滤器相关参数4.4布隆过滤器工具类4.5业务操作4.5.1基于JVM本地缓存的BloomFilte</div>
                    </li>
                    <li><a href="/article/1882246914846552064.htm"
                           title="K8s架构与组件" target="_blank">K8s架构与组件</a>
                        <span class="text-muted">稚辉君.MCA_P8_Java</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>一、K8s架构在Master通常上包括kube-apiserver、etcd存储、kube-controller-manager、cloud-controller-manager、kube-scheduler和用于K8s服务的DNS服务器(插件)。这些对集群做出全局决策(比如调度),以及检测和响应集群事件的组件集合也称为控制平面。其实K8s官方并没有Master这一说,只是大多数安装工具(kube</div>
                    </li>
                    <li><a href="/article/1882246284815953920.htm"
                           title="Spring-boot定时任务,注解@Scheduled的参数说明" target="_blank">Spring-boot定时任务,注解@Scheduled的参数说明</a>
                        <span class="text-muted">旷野孤星</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BA%E7%AC%94%E8%AE%B0/1.htm">个人笔记</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/1.htm">学习记录</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">后端框架</a><a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/Spring-Boot/1.htm">Spring-Boot</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/%40Scheduled/1.htm">@Scheduled</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a>
                        <div>关于Scheduled的参数1.corn2.fixedDelay3.fixedDelayString4.fixedRate5.fixedRateString6.initialDelay7.initialDelayString8.zone总共有八种参数类型,对于第一种类型一般使用就最熟悉了,是可以控制方法在任意的年月日时分秒上执行,同时不断循环。比较简单,网上的说明也比较多,就不做解释。fixedR</div>
                    </li>
                    <li><a href="/article/1882246031563878400.htm"
                           title="如何用Netty实现一个负载均衡组件" target="_blank">如何用Netty实现一个负载均衡组件</a>
                        <span class="text-muted">youyouiknow</span>
<a class="tag" taget="_blank" href="/search/tech-review/1.htm">tech-review</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>一、总体架构一个基本的负载均衡组件通常包含以下几个核心模块:服务注册与发现(ServiceRegistry&Discovery):功能:维护可用的后端服务实例列表(例如IP地址和端口)。实现要点:注册:服务实例启动时,将自己注册到注册中心。发现:负载均衡器从注册中心获取服务实例列表。健康检查:定期检查服务实例的健康状态,剔除不健康的实例。可选技术:ZooKeeper,etcd,Consul,Nac</div>
                    </li>
                    <li><a href="/article/1882246032436293632.htm"
                           title="raft4j:练手之作" target="_blank">raft4j:练手之作</a>
                        <span class="text-muted">youyouiknow</span>
<a class="tag" taget="_blank" href="/search/tech-review/1.htm">tech-review</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>raft4j是一个我的基于RAFT一致性算法的高性能Java实现,其核心功能围绕分布式系统中的一致性协议展开。整体架构raft4j的架构设计清晰,核心模块围绕RAFT协议的三个部分展开:Leader选举确保在任何时间只有一个有效的Leader承担写入请求。日志复制保证日志在所有节点上的一致性。日志应用和状态机将日志应用到状态机,提供最终一致的系统状态。raft4j通过高度模块化的设计,将这些功能封</div>
                    </li>
                    <li><a href="/article/1882245779540733952.htm"
                           title="告别龟速加载:三种压缩算法让你的网站瞬间提速!" target="_blank">告别龟速加载:三种压缩算法让你的网站瞬间提速!</a>
                        <span class="text-muted">youyouiknow</span>
<a class="tag" taget="_blank" href="/search/tech-review/1.htm">tech-review</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>三种压缩算法,让你的网站飞起来!!!前言在当今快节奏的互联网世界,用户对网站加载速度的要求越来越高。一个加载缓慢的网站不仅会损害用户体验,还会影响搜索引擎排名,最终导致流量和转化率的下降。为了提升网站性能,优化页面加载速度,数据压缩技术应运而生。通过压缩服务器响应数据,可以有效减少网络传输量,从而缩短页面加载时间,让你的网站“飞”起来!本文将深入探讨三种常用的网站压缩算法:Gzip、Brotli和</div>
                    </li>
                    <li><a href="/article/1882245022934429696.htm"
                           title="如何禁用OpenAI的并行工具调用" target="_blank">如何禁用OpenAI的并行工具调用</a>
                        <span class="text-muted">hgSdaegva</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>在使用OpenAI提供的API进行开发时,我们可能会碰到工具调用默认是并行执行的场景。这意味着如果我们询问类似“东京、纽约和芝加哥的天气如何?”的问题,并且我们有一个获取天气的工具,OpenAI将会同时对这三个城市分别发起调用。然而,在某些开发场景中,我们可能希望限制工具调用的并行性,比如在顺序依赖较强的任务中,或者对于某些需要节约资源的场景。本文将通过代码示例,详细讲解如何禁用并行工具调用。核心</div>
                    </li>
                    <li><a href="/article/1882244895469531136.htm"
                           title="网易云音乐API开源项目常见问题解决方案" target="_blank">网易云音乐API开源项目常见问题解决方案</a>
                        <span class="text-muted">束斯畅Sharon</span>

                        <div>网易云音乐API开源项目常见问题解决方案NeteaseCloudMusicApiC#版网易云音乐API(翻译自Node.js项目Binaryify/NeteaseCloudMusicApi)项目地址:https://gitcode.com/gh_mirrors/net/NeteaseCloudMusicApi项目基础介绍网易云音乐API项目是一个开源项目,旨在为开发者提供网易云音乐的各种API接口</div>
                    </li>
                    <li><a href="/article/1882244896119648256.htm"
                           title="jvm-sandbox-repeater安装与使用指南" target="_blank">jvm-sandbox-repeater安装与使用指南</a>
                        <span class="text-muted">裴剑苹</span>

                        <div>jvm-sandbox-repeater安装与使用指南项目地址:https://gitcode.com/gh_mirrors/jv/jvm-sandbox-repeater1、项目的目录结构及介绍jvm-sandbox-repeater作为阿里巴巴开源的一款基于JVM-Sandbox的流量录制与回放解决方案,在其源码仓库中拥有清晰的目录结构,具体解析如下:bin:包含一系列辅助脚本,如instal</div>
                    </li>
                    <li><a href="/article/1882244896518107136.htm"
                           title="WPF架构关键技术剖析(2)--XAML、对象序列化、类动态实例化" target="_blank">WPF架构关键技术剖析(2)--XAML、对象序列化、类动态实例化</a>
                        <span class="text-muted">广州接入</span>
<a class="tag" taget="_blank" href="/search/2/1.htm">2</a><a class="tag" taget="_blank" href="/search/Silverlight/1.htm">Silverlight</a><a class="tag" taget="_blank" href="/search/4/1.htm">4</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a><a class="tag" taget="_blank" href="/search/1/1.htm">1</a><a class="tag" taget="_blank" href="/search/C%EF%BC%83/1.htm">C#</a><a class="tag" taget="_blank" href="/search/6/1.htm">6</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E6%84%9F%E6%82%9F/1.htm">编程感悟</a><a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a><a class="tag" taget="_blank" href="/search/delphi/1.htm">delphi</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80/1.htm">语言</a><a class="tag" taget="_blank" href="/search/assembly/1.htm">assembly</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a>
                        <div>我们知道对于界面元素的描述,WPF的XAML不是第一个,HTML就要早很多,delphi的dfm也是一种。界面描述和界面交互逻辑的分离是有很多好处的,比如有利于可视化设计,有利于界面复用等。微软总是想一统天下,WPF的出现也是这种理想。当然,这种理想的出现也是有实际需求支持的。对于应用程序架构来说,传统的CS和BS都在相互融合,所以整合这两种模式下的界面设计也有其需求,并有利于两种模式的转换和融合</div>
                    </li>
                    <li><a href="/article/1882243888215814144.htm"
                           title="(6)STM32 USB设备开发-USB键鼠一体设备" target="_blank">(6)STM32 USB设备开发-USB键鼠一体设备</a>
                        <span class="text-muted">andylauren</span>
<a class="tag" taget="_blank" href="/search/STM32/1.htm">STM32</a><a class="tag" taget="_blank" href="/search/USB%E8%AE%BE%E5%A4%87%E5%BC%80%E5%8F%91/1.htm">USB设备开发</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a>
                        <div>例程:STM32USBdevice:基于STM32的USB设备例子程序-Gitee.com键鼠一体的应用场景如集合器,比如我们在网上购买的键鼠套装,是将2.4G集合到一个USB接收器中,这个USB接收器对于PC来说就是一个键鼠一体设备。或者我们可以自制一个带有鼠标摇杆的键盘等场景。键鼠一体实现方式是在报告描述符中描述两个设备,即键盘设备和鼠标设备,报告描述就是将键盘描述和鼠标描述何为一个,那么PC</div>
                    </li>
                    <li><a href="/article/1882243762105675776.htm"
                           title="WPF快速入门3——XAML对象属性赋值" target="_blank">WPF快速入门3——XAML对象属性赋值</a>
                        <span class="text-muted">阿卡蒂奥</span>
<a class="tag" taget="_blank" href="/search/WPF/1.htm">WPF</a><a class="tag" taget="_blank" href="/search/WPF/1.htm">WPF</a>
                        <div>对象属性赋值1、Attribute=Value形式优点:赋值方便。缺点:Value为字符串,但是对象属性未必是字符串,因此无法赋太复杂的值。示例:绘制一个矩形,填充颜色并设置圆角;绘制一个路径,将路径闭合并填充颜色;效果如图所示:2、属性标签优点:可以为对象属性赋较为复杂的值。缺点:程序量大(因此在允许条件下可部分采用Attribute=Value形式,或使用属性默认值)。示例:在按钮对象上绘制一</div>
                    </li>
                    <li><a href="/article/1882243383800426496.htm"
                           title="商汤善惠获金沙江创投领投A轮融资,聚焦零售AI业务" target="_blank">商汤善惠获金沙江创投领投A轮融资,聚焦零售AI业务</a>
                        <span class="text-muted">TMT星球</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E9%9B%B6%E5%94%AE/1.htm">零售</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>1月20日,商汤善惠宣布完成A轮融资,本轮融资由金沙江创投数千万元领投,微木资本、嘉实基金和金弘基金等知名资管平台和产业资本数千万元跟投,鞍羽资本担任长期财务顾问。此次融资将重点投向零售AI算法研发创新、海外市场拓展战略方向,助力公司全球化布局迈入新阶段。商汤善惠脱胎于全球领先的AI人工智能软件公司商汤集团,聚焦零售领域的商品识别算法与智能运营提效算法,目前,公司已推出引领行业的新一代无人零售智能</div>
                    </li>
                    <li><a href="/article/1882242375170977792.htm"
                           title="如何使用 LangChain 组合提示符模板" target="_blank">如何使用 LangChain 组合提示符模板</a>
                        <span class="text-muted">GEAWfaacc</span>
<a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>在现代AI应用中,构建灵活且易于重用的提示符(Prompt)是开发者的核心需求之一。LangChain提供了一种直观的方法来组合不同部分的提示,从而实现提示符模板的高效组合和再利用。本篇文章将通过几个具体的例子,带您了解如何在LangChain中进行提示符的组合。技术背景介绍LangChain是一个用于处理语言模型提示符的框架,它支持将字符串提示符和聊天提示符进行组合,从而提高开发效率和代码复用性</div>
                    </li>
                    <li><a href="/article/1882241366990319616.htm"
                           title="写了一个关于root的介绍以及大致流程(全篇都是自己写的)本人是小菜,欢迎大家指点" target="_blank">写了一个关于root的介绍以及大致流程(全篇都是自己写的)本人是小菜,欢迎大家指点</a>
                        <span class="text-muted">王景程</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/scipy/1.htm">scipy</a>
                        <div>IwanttogiveyouaintroductionofwhatROOTisandthemainstepsofhowtodothat.Iwilltrymybesttoexplain,andifthereareanywordsorsentencesthatarenotaccurate,feelfreetopiontout,asawaytopracticemywriting.Inlayman'ste</div>
                    </li>
                    <li><a href="/article/1882241367690768384.htm"
                           title="Java算法栈" target="_blank">Java算法栈</a>
                        <span class="text-muted">王景程</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                        <div>栈作为编程中一个常见的算法,以下是它的特征以及一个相对应的例子:在编程中,**栈(Stack)**是一种后进先出(LIFO,LastInFirstOut)数据结构。它的特性是:入栈(Push):将元素添加到栈顶。出栈(Pop):将栈顶元素移除。查看栈顶元素(Peek/Top):获取栈顶元素但不移除。Java提供了一个现成的Stack类,它是java.util包的一部分,可以直接用于算法问题中。算法</div>
                    </li>
                    <li><a href="/article/1882241240573997056.htm"
                           title="Hadoop分布式文件系统-HDFS架构" target="_blank">Hadoop分布式文件系统-HDFS架构</a>
                        <span class="text-muted">Fancs2024</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hdfs/1.htm">hdfs</a>
                        <div>一、HDFS的简介HDFS全称HadoopDistributedFileSystem,是分布式文件管理系统。主要是为了解决大数据如何存储的问题,跟一般文件系统不同的是,它可以通过扩展服务器结点来扩充存储量,可以用低成本的硬件构建出支持高吞吐量的文件系统。二、HDFS的特点高容错性:一个HDFS集群会包含非常多的结点,HDFS将文件分块存储,并且会保存多个副本到不同的机器节点上以保证数据的安全,而且</div>
                    </li>
                    <li><a href="/article/1882241238527176704.htm"
                           title="后端开发基础——JavaWeb(根基,了解原理)浓缩" target="_blank">后端开发基础——JavaWeb(根基,了解原理)浓缩</a>
                        <span class="text-muted">Wanna715</span>
<a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/1.htm">后端开发基础</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>总述学习Tomcat、JSON、Servlet、Filter、Session、Cookie、Ajax异步请求、RESTful接口规范、JSP(很老的技术,了解)Servlet系统架构C/S架构(Client/Server(客户端/服务器))B/S架构(Browser/Server,浏览器/服务器)javaJavaSE:Java标准版JavaEE:企业版(WEB方向,WEB系统)13种规范,其中Se</div>
                    </li>
                    <li><a href="/article/1882240860406476800.htm"
                           title="JVM学习指南(44)-JVM模块化" target="_blank">JVM学习指南(44)-JVM模块化</a>
                        <span class="text-muted">俞兆鹏</span>
<a class="tag" taget="_blank" href="/search/JVM%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8D%97/1.htm">JVM学习指南</a><a class="tag" taget="_blank" href="/search/JVM/1.htm">JVM</a>
                        <div>文章目录模块化概述模块化的重要性JVM模块化的历史背景Java模块化的演变模块化的关键概念模块(module)要求(requires)导出(exports)开放(opens)模块化的实际应用定义模块使用模块模块化的影响模块化的未来展望新特性和改进对Java生态系统的影响模块化概述在软件开发中,模块化是一种将复杂系统分解成更小、更易管理的部分的方法。这种分解不仅有助于提高代码的可读性和可维护性,还能</div>
                    </li>
                    <li><a href="/article/1882240345169784832.htm"
                           title="碳课堂|氢能--双碳目标下的未来能源之星" target="_blank">碳课堂|氢能--双碳目标下的未来能源之星</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E7%AE%97%E6%B3%95/1.htm">运维算法</a>
                        <div>随着全球气候变化的严峻挑战,实现碳达峰和碳中和已成为各国共同追求的目标。在此背景下,清洁能源的开发和利用变得尤为关键。其中氢能,以其独特的清洁、高效和可再生的特性,被视为推动能源转型和实现双碳目标的重要力量。本文将深入探讨氢能的基本概念和应用领域。什么是氢能?氢能是指通过氢气(H2)作为能源载体进行能量转换和利用的能源形式。氢气可以通过多种方式制取,包括化石燃料重整、工业副产品提纯以及通过可再生能</div>
                    </li>
                                <li><a href="/article/104.htm"
                                       title="springmvc 下 freemarker页面枚举的遍历输出" target="_blank">springmvc 下 freemarker页面枚举的遍历输出</a>
                                    <span class="text-muted">杨白白</span>
<a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/freemarker/1.htm">freemarker</a>
                                    <div>spring mvc freemarker 中遍历枚举 
 
1枚举类型有一个本地方法叫values(),这个方法可以直接返回枚举数组。所以可以利用这个遍历。 
 

enum

public enum BooleanEnum {  
    TRUE(Boolean.TRUE, "是"), FALSE(Boolean.FALSE, "否");  
</div>
                                </li>
                                <li><a href="/article/231.htm"
                                       title="实习简要总结" target="_blank">实习简要总结</a>
                                    <span class="text-muted">byalias</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div>来白虹不知不觉中已经一个多月了,因为项目还在需求分析及项目架构阶段,自己在这段 
时间都是在学习相关技术知识,现在对这段时间的工作及学习情况做一个总结: 
 
(1)工作技能方面 
大体分为两个阶段,Java Web 基础阶段和Java EE阶段 
 
1)Java Web阶段 
在这个阶段,自己主要着重学习了 JSP, Servlet, JDBC, MySQL,这些知识的核心点都过 
了一遍,也</div>
                                </li>
                                <li><a href="/article/358.htm"
                                       title="Quartz——DateIntervalTrigger触发器" target="_blank">Quartz——DateIntervalTrigger触发器</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2208559 一.概述 
simpleTrigger 内部实现机制是通过计算间隔时间来计算下次的执行时间,这就导致他有不适合调度的定时任务。例如我们想每天的 1:00AM 执行任务,如果使用 SimpleTrigger,间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务并且恢复执行时,该执行时间</div>
                                </li>
                                <li><a href="/article/485.htm"
                                       title="Unix快捷键" target="_blank">Unix快捷键</a>
                                    <span class="text-muted">18289753290</span>
<a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a><a class="tag" taget="_blank" href="/search/Unix%EF%BC%9B%E5%BF%AB%E6%8D%B7%E9%94%AE%3B/1.htm">Unix;快捷键;</a>
                                    <div>复制,删除,粘贴: 
dd:删除光标所在的行                             &nbs</div>
                                </li>
                                <li><a href="/article/612.htm"
                                       title="获取Android设备屏幕的相关参数" target="_blank">获取Android设备屏幕的相关参数</a>
                                    <span class="text-muted">酷的飞上天空</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>包含屏幕的分辨率  以及 屏幕宽度的最大dp 高度最大dp   
  
        TextView text = (TextView)findViewById(R.id.text);
        DisplayMetrics dm = new DisplayMetrics();
        text.append("getResources().ge</div>
                                </li>
                                <li><a href="/article/739.htm"
                                       title="要做物联网?先保护好你的数据" target="_blank">要做物联网?先保护好你的数据</a>
                                    <span class="text-muted">蓝儿唯美</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE/1.htm">数据</a>
                                    <div>根据Beecham Research的说法,那些在行业中希望利用物联网的关键领域需要提供更好的安全性。 
在Beecham的物联网安全威胁图谱上,展示了那些可能产生内外部攻击并且需要通过快速发展的物联网行业加以解决的关键领域。 
Beecham Research的技术主管Jon Howes说:“之所以我们目前还没有看到与物联网相关的严重安全事件,是因为目前还没有在大型客户和企业应用中进行部署,也就</div>
                                </li>
                                <li><a href="/article/866.htm"
                                       title="Java取模(求余)运算" target="_blank">Java取模(求余)运算</a>
                                    <span class="text-muted">随便小屋</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>        整数之间的取模求余运算很好求,但几乎没有遇到过对负数进行取模求余,直接看下面代码: 
/**
 * 
 * @author Logic
 *
 */
public class Test {

	public static void main(String[] args) {
		// TODO A</div>
                                </li>
                                <li><a href="/article/993.htm"
                                       title="SQL注入介绍" target="_blank">SQL注入介绍</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/sql%E6%B3%A8%E5%85%A5/1.htm">sql注入</a>
                                    <div>二、SQL注入范例 
  
 这里我们根据用户登录页面 
  <form action="" > 用户名:<input type="text" name="username"><br/> 密 码:<input type="password" name="passwor</div>
                                </li>
                                <li><a href="/article/1120.htm"
                                       title="优雅代码风格" target="_blank">优雅代码风格</a>
                                    <span class="text-muted">aoyouzi</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a>
                                    <div>总结了几点关于优雅代码风格的描述: 
 
 代码简单:不隐藏设计者的意图,抽象干净利落,控制语句直截了当。 
 接口清晰:类型接口表现力直白,字面表达含义,API 相互呼应以增强可测试性。 
 依赖项少:依赖关系越少越好,依赖少证明内聚程度高,低耦合利于自动测试,便于重构。 
 没有重复:重复代码意味着某些概念或想法没有在代码中良好的体现,及时重构消除重复。 
 战术分层:代码分层清晰,隔离明确,</div>
                                </li>
                                <li><a href="/article/1247.htm"
                                       title="布尔数组" target="_blank">布尔数组</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%B8%83%E5%B0%94%E6%95%B0%E7%BB%84/1.htm">布尔数组</a>
                                    <div>  
androi中提到了布尔数组; 
  
布尔数组默认的是false,  并且只会打印false或者是true 
  
布尔数组的例子;  根据字符数组创建布尔数组 
		char[] c = {'p','u','b','l','i','c'};
		//根据字符数组的长度创建布尔数组的个数
		boolean[] b = new bool</div>
                                </li>
                                <li><a href="/article/1374.htm"
                                       title="web.xml之welcome-file-list、error-page" target="_blank">web.xml之welcome-file-list、error-page</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/error-page/1.htm">error-page</a>
                                    <div>welcome-file-list 
1.定义: 
<welcome-file-list>
    <welcome-file>login.jsp</welcome>
</welcome-file-list> 
 2.作用:用来指定WEB应用首页名称。 
  
error-page1.定义: 
<error-page&g</div>
                                </li>
                                <li><a href="/article/1501.htm"
                                       title="richfaces 4 fileUpload组件删除上传的文件" target="_blank">richfaces 4 fileUpload组件删除上传的文件</a>
                                    <span class="text-muted">sunjing</span>
<a class="tag" taget="_blank" href="/search/clear/1.htm">clear</a><a class="tag" taget="_blank" href="/search/Richfaces+4/1.htm">Richfaces 4</a><a class="tag" taget="_blank" href="/search/fileupload/1.htm">fileupload</a>
                                    <div> 页面代码       
        <h:form id="fileForm">            <rich:</div>
                                </li>
                                <li><a href="/article/1628.htm"
                                       title="技术文章备忘" target="_blank">技术文章备忘</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%96%87%E7%AB%A0/1.htm">技术文章</a>
                                    <div>Zookeeper 
http://wenku.baidu.com/view/bab171ffaef8941ea76e05b8.html 
http://wenku.baidu.com/link?url=8thAIwFTnPh2KL2b0p1V7XSgmF9ZEFgw4V_MkIpA9j8BX2rDQMPgK5l3wcs9oBTxeekOnm5P3BK8c6K2DWynq9nfUCkRlTt9uV</div>
                                </li>
                                <li><a href="/article/1755.htm"
                                       title="org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案" target="_blank">org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>文章摘自:http://blog.csdn.net/yangwawa19870921/article/details/7553181 
  
在编写HQL时,可能会出现这种代码: 
  
select a.name,b.age from TableA a left join TableB b on a.id=b.id 
 如果这是HQL,那么这段代码就是错误的,因为HQL不支持</div>
                                </li>
                                <li><a href="/article/1882.htm"
                                       title="sqlserver按照字段内容进行排序" target="_blank">sqlserver按照字段内容进行排序</a>
                                    <span class="text-muted">bozch</span>
<a class="tag" taget="_blank" href="/search/%E6%8C%89%E7%85%A7%E5%86%85%E5%AE%B9%E6%8E%92%E5%BA%8F/1.htm">按照内容排序</a>
                                    <div>在做项目的时候,遇到了这样的一个需求: 
          从数据库中取出的数据集,首先要将某个数据或者多个数据按照地段内容放到前面显示,例如:从学生表中取出姓李的放到数据集的前面; 
         select * fro</div>
                                </li>
                                <li><a href="/article/2009.htm"
                                       title="编程珠玑-第一章-位图排序" target="_blank">编程珠玑-第一章-位图排序</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E7%8F%A0%E7%8E%91/1.htm">编程珠玑</a>
                                    <div>

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Random;

public class BitMapSearch {

  </div>
                                </li>
                                <li><a href="/article/2136.htm"
                                       title="Java关于==和equals" target="_blank">Java关于==和equals</a>
                                    <span class="text-muted">chenbowen00</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>关于==和equals概念其实很简单,一个是比较内存地址是否相同,一个比较的是值内容是否相同。虽然理解上不难,但是有时存在一些理解误区,如下情况: 
1、 
 
String a = "aaa"; 
a=="aaa"; 
==> true 
2、 
 
new String("aaa")==new String("aaa</div>
                                </li>
                                <li><a href="/article/2263.htm"
                                       title="[IT与资本]软件行业需对外界投资热情保持警惕" target="_blank">[IT与资本]软件行业需对外界投资热情保持警惕</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/it/1.htm">it</a>
                                    <div> 
      我还是那个看法,软件行业需要增强内生动力,尽量依靠自有资金和营业收入来进行经营,避免在资本市场上经受各种不同类型的风险,为企业自主研发核心技术和产品提供稳定,温和的外部环境... 
 
      如果我们在自己尚未掌握核心技术之前,企图依靠上市来筹集资金,然后使劲往某个领域砸钱,然</div>
                                </li>
                                <li><a href="/article/2390.htm"
                                       title="oracle 数据块结构" target="_blank">oracle 数据块结构</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%9D%97/1.htm">块</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%9D%97/1.htm">数据块</a><a class="tag" taget="_blank" href="/search/%E5%9D%97%E7%BB%93%E6%9E%84/1.htm">块结构</a><a class="tag" taget="_blank" href="/search/%E8%A1%8C%E7%9B%AE%E5%BD%95/1.htm">行目录</a>
                                    <div>oracle 数据块是数据库存储的最小单位,一般为操作系统块的N倍。其结构为: 
 
块头--〉空行--〉数据,其实际为纵行结构。 
 
块的标准大小由初始化参数DB_BLOCK_SIZE指定。具有标准大小的块称为标准块(Standard Block)。块的大小和标准块的大小不同的块叫非标准块(Nonstandard Block)。同一数据库中,Oracle9i及以上版本支持同一数据库中同时使用标</div>
                                </li>
                                <li><a href="/article/2517.htm"
                                       title="github上一些觉得对自己工作有用的项目收集" target="_blank">github上一些觉得对自己工作有用的项目收集</a>
                                    <span class="text-muted">dengkane</span>
<a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                                    <div>github上一些觉得对自己工作有用的项目收集  
   
技能类 
 
 markdown语法中文说明 
  
回到顶部 
   
全文检索 
 
  elasticsearch  
  bigdesk elasticsearch管理插件  
  
回到顶部 
   
nosql 
 
  mapdb 支持亿级别map, list, 支持事务. 可考虑做为缓存使用  
  C</div>
                                </li>
                                <li><a href="/article/2644.htm"
                                       title="初二上学期难记单词二" target="_blank">初二上学期难记单词二</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>dangerous 危险的 
panda 熊猫 
lion 狮子 
elephant 象 
monkey 猴子 
tiger 老虎 
deer 鹿 
snake 蛇 
rabbit 兔子 
duck 鸭 
horse 马 
forest 森林 
fall 跌倒;落下 
climb 爬;攀登 
finish 完成;结束 
cinema 电影院;电影 
seafood 海鲜;海产食品 
bank 银行</div>
                                </li>
                                <li><a href="/article/2771.htm"
                                       title="8、mysql外键(FOREIGN KEY)的简单使用" target="_blank">8、mysql外键(FOREIGN KEY)的简单使用</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>一、基本概念 
1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。 
2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。 
3、如</div>
                                </li>
                                <li><a href="/article/2898.htm"
                                       title="java循环标签 Foreach" target="_blank">java循环标签 Foreach</a>
                                    <span class="text-muted">shuizhaosi888</span>
<a class="tag" taget="_blank" href="/search/%E6%A0%87%E7%AD%BE/1.htm">标签</a><a class="tag" taget="_blank" href="/search/java%E5%BE%AA%E7%8E%AF/1.htm">java循环</a><a class="tag" taget="_blank" href="/search/foreach/1.htm">foreach</a>
                                    <div>1. 简单的for循环 
	public static void main(String[] args) {
		for (int i = 1, y = i + 10; i < 5 && y < 12; i++, y = i * 2) {

			System.err.println("i=" + i + "    y=" </div>
                                </li>
                                <li><a href="/article/3025.htm"
                                       title="Spring Security(05)——异常信息本地化" target="_blank">Spring Security(05)——异常信息本地化</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a><a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E5%B8%B8%E4%BF%A1%E6%81%AF/1.htm">异常信息</a><a class="tag" taget="_blank" href="/search/%E6%9C%AC%E5%9C%B0%E5%8C%96/1.htm">本地化</a>
                                    <div>异常信息本地化 
  
       Spring Security支持将展现给终端用户看的异常信息本地化,这些信息包括认证失败、访问被拒绝等。而对于展现给开发者看的异常信息和日志信息(如配置错误)则是不能够进行本地化的,它们是以英文硬编码在Spring Security的代码中的。在Spring-Security-core-x</div>
                                </li>
                                <li><a href="/article/3152.htm"
                                       title="DUBBO架构服务端告警Failed to send message Response" target="_blank">DUBBO架构服务端告警Failed to send message Response</a>
                                    <span class="text-muted">javamingtingzhao</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/DUBBO/1.htm">DUBBO</a>
                                    <div> 废话不多说,警告日志如下,不知道有哪位遇到过,此异常在服务端抛出(服务器启动第一次运行会有这个警告),后续运行没问题,找了好久真心不知道哪里错了。 
  
 WARN 2015-07-18 22:31:15,272 com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(84)</div>
                                </li>
                                <li><a href="/article/3279.htm"
                                       title="JS中Date对象中几个用法" target="_blank">JS中Date对象中几个用法</a>
                                    <span class="text-muted">leeqq</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Date/1.htm">Date</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%90%8E%E4%B8%80%E5%A4%A9/1.htm">最后一天</a>
                                    <div>近来工作中遇到这样的两个需求 
1. 给个Date对象,找出该时间所在月的第一天和最后一天 
2. 给个Date对象,找出该时间所在周的第一天和最后一天 
  
需求1中的找月第一天很简单,我记得api中有setDate方法可以使用 
使用setDate方法前,先看看getDate 
var date = new Date();
console.log(date);
// Sat J</div>
                                </li>
                                <li><a href="/article/3406.htm"
                                       title="MFC中使用ado技术操作数据库" target="_blank">MFC中使用ado技术操作数据库</a>
                                    <span class="text-muted">你不认识的休道人</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mfc/1.htm">mfc</a>
                                    <div>1.在stdafx.h中导入ado动态链接库 
 
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","end")2.在CTestApp文件的InitInstance()函数中domodal之前写::CoIniti</div>
                                </li>
                                <li><a href="/article/3533.htm"
                                       title="Android Studio加速" target="_blank">Android Studio加速</a>
                                    <span class="text-muted">rensanning</span>
<a class="tag" taget="_blank" href="/search/android+studio/1.htm">android studio</a>
                                    <div>Android Studio慢、吃内存!启动时后会立即通过Gradle来sync & build工程。 
 
 
(1)设置Android Studio 
a) 禁用插件 
File -> Settings...  Plugins 去掉一些没有用的插件。 
比如:Git Integration、GitHub、Google Cloud Testing、Google Cloud</div>
                                </li>
                                <li><a href="/article/3660.htm"
                                       title="各数据库的批量Update操作" target="_blank">各数据库的批量Update操作</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/sqlite/1.htm">sqlite</a>
                                    <div>MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了。本篇仅记录批量update操作的 
sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了。     注意:下列批量更新语句都是作为一个事务整体执行,要不全部成功,要不全部回滚。   
MSSQL的SQL语句   
 WITH R AS(
  SELECT 'John' as name, 18 as</div>
                                </li>
                                <li><a href="/article/3787.htm"
                                       title="html禁止清除input文本输入缓存" target="_blank">html禁止清除input文本输入缓存</a>
                                    <span class="text-muted">xp9802</span>
<a class="tag" taget="_blank" href="/search/input/1.htm">input</a>
                                    <div>多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。如果不想让浏览器缓存input的值,有2种方法: 
方法一: 在不想使用缓存的input中添加 autocomplete="off"; eg: <input type="text" autocomplete="off" name</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>