ThinkPHP
按照MVC模式开发的一个框架,也叫TP框架。
优点:
1. 快速,稳定的搭建系统程序
2. 可以使开发人员精力集中在业务逻辑上,不需要关心程序的底层架构
3. 可以节省大量的代码,后期的升级、维护、优化十分方便
4. 有利于团队的代码风格统一。
相关的一些框架
1、zend framework
zend公司开发的官方的框架,功能很强大,重量级框架。
2、Yii
国人自己开发的重量级框架,该框架的特点就是代码的可重用性非常好。
3、CI(code Igniter)
轻量级的框架,
4、cakePHP
外国的PHP开发框架
5、ThinkPHP
这是国人开发的,免费、开源的,简单的、面向对象的,轻量级的PHP框架。
在ThinkPHP\Library\Think文件夹中,几个重要的文件
1、App.class.php 框架核心类文件
2、Think.class.php 每次请求都要执行的类
3、Controller.class.php 控制器的父类
4、Model.class.php 模型的父类
5、View.class.php 试图的父类
搭建ThinkPHP的环境
在站点下新建index.php,代码如下
define("APP_PATH",'./Application/');
require './ThinkPHP/ThinkPHP.php';
运行后出现欢迎界面,在说明系统自动生成了ThinkPHP的项目目录,并写入了初始的控制器和方法。
创建控制器
1. 控制器存放在Controller文件夹中
2. 命名规范:控制器的名称+Controller.class.php
3. 类名和文件的名称要一致
4. 类名用帕斯卡命名法
5. 尽量区分大小写,windows不区分大小写,但Linux中区分
6. ThinkPHP默认的编码是UTF-8的。
7. 如果地址中没有写控制器,这默认调用Index控制器,如果没有写方法,则默认调用index方法
命名法:
1、帕斯卡命名法:首字母大写 UserName MyNameIsLiping
2、骆驼命名法:userName _user_name
3、匈牙利命名法:前缀(类别)+名字 radSex txtUsername iIength oStu
ThinkPHP的路由
'VAR_MODULE' => 'm', //默认模块获取变量
'VAR_ADDON' => 'addon', //默认插件控制器命名空间变量
'VAR_CONTROLLER' => 'c', //默认控制器获取变量
'VAR_ACTION' => 'a', /默认操作获取变量
1.普通模式
localhost/index.php?m=home&c=goods&a=show
2.pathinfo模式
http://网址/入口文件(index.php)/分组(平台)/控制器/方法
localhost/index.php/home/goods/index
3.rewrite()重写模式
4.兼容模式
参数s=/分组/控制器/方法。
localhost/index.php?s=/home/goods/show
ThinkPHP中,默认使用pathinfo模式。
定义和调用TP的模板
所有的模板都要放在view文件夹下。
规则:一个控制器对应一个文件夹,一个方法对应一个文件
TP模板的调用
public function index(){
//$this->display(); 当前控制器的方法
//$this->display("show"); //当前控制器的show方法
//$this->display("Goods/index"); //Goods控制器下的index方法
$this->display("./Application/Public/test.html"); 模板页面的绝对地址
}
TP系统常量
function show(){
echo ' ';
echo '当前请求的地址:'.__SELF__.' ';
echo '当前分组:'.__MODULE__.' ';
echo '当前控制器:'.__CONTROLLER__.' ';
echo '当前方法:'.__ACTION__.' ';
}
* 项目后台的搭建
1、在Application文件夹下新建一个Admin文件夹,在Admin文件夹中新建Controller和View文件夹。
2、在Admin\Controller控制器中新建一个LoginController.class.php页面,代码如下:
namespace Admin\Controller;
use Think\Controller;
class LoginController extends Controller{
public function login(){
$this->display();
}
}
3、在login.html中更改css、js、img的路径
4、在Admin\Controller文件夹中新建ManagerClass.php文件
namespace Admin\Controller;
use Think\Controller;
class ManagerController extends Controller{
public function index(){
$this->display();
}
public function head(){
$this->display();
}
public function left(){
$this->display()
}
public function right(){
$this->display()
}
}
5. 对应的index文件
6、注意更改index、head、left、right页面中的路径
tp框架有两种使用模式:开发模式(调试模式),一种是生产模式(运行模式)
define('APP_DEBUG', true); //调试模式
define('APP_DEBUG', false); //调试模式
运行模式会把很多核心文件代码缓存成" common~runtime.php"文件,把原来每次需要加载许多文件的请求现在只要请求一个缓存文件,节省了很多文件的打开,关闭的开销。
在页面的底部显示日志信息
在配置文件中,添加如下配置
return array(
'SHOW_PAGE_TRACE' = > true
);
配置完成后,在浏览器的右下角会显示php logo。
如果想看源码的话,在behavior文件夹下的ShowPageTraceBehavior.class.php
public function run(&$params){
if(!IS_AJAX && !IS_CLL && C('SHOW_PAGE_TRACE')){
echo $this->showTrace;
}
}
把ThinkPHP的引擎改成Smarty
return array(
'TMPL_ENGINE_TYPE'=>'Smarty',
);
Smarty引擎存放在vender目录下
smarty驱动存放在Library/Think/Template/Driver 下的Smarty.class.php
若想修改Smarty的配置(不建议修改)
'TMPL_ENGINE_CONFIG' => array(
'template_dir'=>'',
'compile_dir'=>'',
'cache_dir'=>''
);
空操作
系统在找不到请求的方法的时候,会定位到__empty()方法处理,利用这个机制,我们可以对用户请求的不存在的所有操作进行统一处理。
public function _empty(){
echo ' ';
echo '非法操作';
}
空控制器
当系统请求找不到控制器,会定位到空控制器上EmptyController。
';
echo '页面不存在';
}
}
?>
跨控制器调用
1、直接实例化
public function test(){
$obj = new ManagerController();
$obj->managertest();
}
2. A()
A()用来实例化其他控制器的。
$obj = A("Manager");
$obj->managertest();
3、R()
R()和A()基本一样,唯一不同的是R()函数在实例化控制器的时候把操作方法一起传递过去,省略了方法的调用
R('Manager/managertest');
惯例配置:ThinkPHP/conf/convention.php
应用配置:Application/Common/conf/config.php
调试配置:Application/Common/conf/debug.php
模块配置:Application/Home/conf/config.php
加载顺序
惯例配置->应用配置->调试配置->模块配置
优先级:
模块配置>调试配置>应用配置>惯例配置
C('配置的名称') 用来获取配置信息。
判断
PHP运算符
对应TP中的运算符
<
lt
>
gt
==
eq
>=
egt
<=
elt
使用:
your scores: {$score}
你是我的骄傲
Good!
Well!
Come on!
Try Again!
循环
{$b}:hi
连接数据库
TRUE,
'DB_TYPE'=>'mysql',
'DB_HOST'=>'localhost',
'DB_NAME'=>'db_name',
'DB_USER'=>'root',
'DB_PWD'=>'123',
'DB_PORT'=>'3306',
'DB_PREFIX'=>'sw_', //数据库表前缀
);
?>
在配置文件中,做如上的配置,即可连接数据库
把"Home/Model"文件夹剪切到Application文件夹下,让Home和Admin共同使用。
第一种实例化模型的方法
public function test(){
$goods = new \Model\GoodsModel();
echo '';
var_dump($goods);
}
第二种:
public function test(){
$goods=M("goods");
echo '';
var_dump($goods);
}
第三种:
public function test(){
$goods=D("goods");
echo '';
var_dump($goods);
}
在tp3.2以后,M()和D()是一样的,在3.2之前版本中
M() 类似于是 new Model();
D('goods') 类似于 new GoodsModel():
提示:我们可以看到goods表的信息,在GoodsModel中没有写代码,所有的业务逻辑都是Model类来实现的。
对表的操作
增加:M('表名')->add($data);
删除:M('表名')->delete($id);
更新:M('表名')->save($data);
查询:M('表名')->select();
普通查询(显示所有的商品)
1、GoodsController中的代码如下:
namespace Admin\Controller;
use Think\Controller;
class GoodsController extends Controller{
public function showlist(){
$list=M('goods')->select();
$this->assign('list',$list);
$this->display();
}
}
2.在模板中循环取出
//list数组名称,vo循环变量
//$i从1开始,$key从零开始
{$i}
{$vo.goods_name}
{$vo.goods_number}
{$vo.goods_price}
![](/aaa/a.jpg)
{$vo.goods_brand_id}
{$vo.goods_create_time}
Modify
delete
3.获取一条记录
$goods=M('goods')->find();
var_dump($goods);
条件查询
//查询主键为1的记录
$list=M('goods')->select(1);
//查询编号是2,3,4,5的记录
$list=M('goods')->select("2,3,4,5");
//where条件
$list=M("goods")->where("goods_name like 'iphone%'")->select();
$list=M("goods")->where("goods_name like 'iphone%' and goods_price>=102")->select();
/limit
$list=M("goods")->limit(5)->select();
$list=M("goods")->limit(2,5)->select();
//where and limit
$list=M("Model")->where("goods_price>1000")->limit(3)->select();
//排序
$list=M("goods")->where("goods_price desc")->select();
//指定字段
$list=M("goods")->field("goods_nae,goods_price")->select();
//having
$list=M("goods")->having("goods_price>2000")->select();
//分组
$list=M("goods")->group("goods_brand_id")->field("goods_brand_id,max(goods_price) m")->having('m>2000')->select();
having和where的区别
区别一:
where后面跟的字段必须在数据表中有
having后面跟的字段必须在数据集中有
区别二:
select * from 表 where 条件 group by 分组 having 条件
动态查询
getby+字段名
$data=M('goods')->getBygoods_id(9); //返回一条记录
聚合函数
$goods=M("goods");
$goods->count();
$goods->max("goods_price");
$goods->min("goods_price");
$goods->mavg("goods_price");
$goods->sum("goods_price");
数据添加
1、通过关联数组的方法添加:如果主键自动增长
则返回自动增长的编号,否则返回受记录的记录数.如果SQL遇见有错误,则返回false;
$data = array(
'good_name'=>'phone',
'goods_price'=>2400
);
echo M('goods')->add($data);
2、通过AR(active record)方式来添加
$goods=M('goods');
$goods->goods_name = 'TV';
$goods->goods_price = 45332;
echo $goods->add();
数据修改
1、通过关联数组的方法
$data = array(
'goods_name'=>'phone222',
'goods_price'=>2234,
'goods_id'=>22
);
echo M('goods')->save($data); //返回受影响的记录
2、通过AR(active record)方式
$goods=M("goods");
$goods->goods_name='TV333';
$goods->goods_price =22334;
$goods_goods_id = 222;
echo $goods->save();
删除数据
M("goods")->delete(123);
M("goods")->delete("112,33");
M(goods)->where("goods_name='apple'")->delete();
$goods=M('goods');
$goods->goods_id = 33;
$goods->delete();
执行SQL语句
//查询用query方法
$list=M()->query('select * from sw_goods');
var_dump($list);
//增加,删除,修改用execute方法
echo M()->execute('delete from sw_goods where good_id=23');
你可能感兴趣的:(ThinkPHP学习)
一台适合普通办公使用的电脑推荐thinkpadE475
sam_1c14
图片发自App图片发自App缺点是内存只有4G。胜在便宜。14寸,很轻薄。给老婆买的。应该不能用来编程,会很慢的,真要用可以自己加根内存条,最大扩展到32G。图片发自App
2005年高考英语北京卷 - 阅读理解C
让文字更美
Howcouldwepossiblythinkthatkeepinganimalsincagesinunnaturalenvironments-mostlyforentertainmentpurposes-isfairandrespectful?我们怎么可能认为把动物关在非自然环境的笼子里——主要是为了娱乐目的——是公平和尊重的呢?Zooofficialssaytheyareconcernedab
2020-11-12 写单片机内存的脚本 nc openocd 事务自动测试
linuxScripter
这是写单片机内存的脚本:z@z-ThinkPad-T400:~/zworkT400/EDA_heiche/zREPOgit/simple-gcc-stm32-project$catz.wholeRun.oneCase.cmdcattmp6.toWrite|awk'{system("echomwb"$1""$2"|nclocalhost4444");}'catUSER/DEBUG/debug.h|g
内网穿透之EW使用、判断服务器是否出网
板栗妖怪
学习 内网渗透
环境搭建使用的是下面文章的环境记一次学习--内网穿透-CSDN博客ew代理然后同样通过thinkphp漏洞写入文件,然后通过蚁剑连接然后上传ew的Linux版本,然后加权执行一层代理正向代理设置正向代理(在ubuntu上),然后kali在proxychain配置文件中连接ubuntu的192.168.244.154的代理端口反向代理在ubuntu上设置反向代理,将连接反弹到kali上的某个端口。然
python基于django/flask的NBA球员大数据分析与可视化python+java+node.js
QQ_511008285
python django flask java spring boot 数据分析
前端开发框架:vue.js数据库mysql版本不限后端语言框架支持:1java(SSM/springboot)-idea/eclipse2.Nodejs+Vue.js-vscode3.python(flask/django)--pycharm/vscode4.php(thinkphp/laravel)-hbuilderx数据库工具:Navicat/SQLyog等都可以本文针对NBA球员的大数据进行
Java基于spring boot的国产电影数据分析与可视化python+java+node.js
QQ_511008285
java spring boot 数据分析 python django vue.js flask
前端开发框架:vue.js数据库mysql版本不限后端语言框架支持:1java(SSM/springboot)-idea/eclipse2.Nodejs+Vue.js-vscode3.python(flask/django)--pycharm/vscode4.php(thinkphp/laravel)-hbuilderx数据库工具:Navicat/SQLyog等都可以 该系统使用进行大数据处理和
【漏洞分享】2018年-2024年HVV 6000+个漏洞 POC 合集分享
漏洞文库-Web安全
漏洞复现 web安全 python 安全 测试工具 网络安全
此份poc集成了Zabbix、用友、通达、Wordpress、Thinkcmf、Weblogic、Tomcat等下载链接:链接:https://pan.quark.cn/s/1cd7d8607b8a
【漏洞利用】2018年-2024年HVV 6000+个漏洞 POC 合集分享
baiolkdnhjaio
漏洞复现 网络安全 web安全 安全
此份poc集成了Zabbix、用友、通达、Wordpress、Thinkcmf、Weblogic、Tomcat等下载链接:链接:https://pan.quark.cn/s/1cd7d8607b8a
妙贼警探第1季第4集中英台词整理和单词统计
littleori
妙贼警探第1季第4集中英台词整理和单词统计英文中文Whatareyouthinking?你在想什么I'mthinkingitwastheaccountant.我想是那个会计Inthelawoffice.律师事务所里的那个Withtheillegalwiretransfer?非法电汇Eitherthat,orcolonelmustardinthelibrary.要么是他要么就是图书馆里的芥末上校[推
We are talking about 《WAR IS A LIE》
MichaelSure
图片发自App图片发自AppTodayIreadabookwhichiscalledWarisalie.ThisisabookwrittebyDavidSwanson,anAmericanwriterwhofightsagainstthewar.WarisawordalwaysrelatetotheUnitedStatesandDavidthinkhismotherlandisthebiggest
c语言练习:POJ 1005 我想我需要一艘船屋(I Think I Need a Houseboat)
七月初七淮水竹亭~
C语言入门 c语言
题目相关信息描述弗雷德·马珀(FredMapper)正在考虑在路易斯安那州购买一些土地来建造他的房子。在调查这片土地的过程中,他了解到,由于密西西比河造成的侵蚀,路易斯安那州实际上每年都在缩小50平方英里。由于弗雷德希望一辈子都住在这所房子里,他需要知道他的土地是否会因侵蚀而消失。在做了更多的研究之后,弗雷德了解到正在失去的土地形成了一个半圆形。这个半圆是以(0,0)为中心的圆的一部分,将圆平分的
『Day96星球晨间复盘』
佳霏老师
一、Do冥想每日计划阅读《活法》瑜伽笔的故事二、Feel4点多窗外就非常热闹了,有一户人家在拉二胡之类的乐器,还是放什么民间小调,但这样的一种嘈杂,并没有影响我做过自己的事情聊完瑜伽,老师放了一首很好听的音乐stutterbug三、Think持续抱有强烈的愿望。在我们的人生中想要做成某件事,我们首先要描画它的理想状态,然后把实现它的过程在头脑里模拟演练,一直到看见他的结果为止,换句话说就是对这件事
Thinkphp中where()条件的使用
2401_84875852
程序员 服务器 java 网络
|notin|notin|$map[‘id’]=array(‘notin’,‘1,5,8’);|idnotin(1,5,8)||and(默认)|and|$map[‘id’]=array(array(‘gt’,1),array(‘lt’,10));|(id>1)AND(id3)OR(idwhere(User->where(User−>where(map)->select();相当于sql语句:nam
微缩屋工匠第1季第2集中英台词整理和单词统计
kuailexuewaiyu
微缩屋工匠第1季第2集中英台词整理和单词统计英文中文Whatwereyouthinking,Marin?你在想什么马琳AgirlinAssendelftdiedtryingtoloseababywithpoison.阿森德福特有个女孩因试图喝毒药堕胎而死Howfargoneareyou?你怀了多久了Six,sevenmonths.六七个月Perhapsmore.也许更久Howdidyouhidei
Thinking,fast and slow CH6
哇620
Chapter6Norms,SurpriseandCausesThemainfunctionofSystem1istomaintainandupdateamodelofyourpersonalworld,whichrepresentswhatisnorminit.我们对这个的认知是由系统1快速作出反应的,比如听到“桌子”这个词,我们马上能知道他是个什么样子,这也是类人能够沟通的基础。而这些认知是不
豆豆鹿祝大家圣诞节快乐!Merry Christmas!
DDDeer豆豆鹿
ThinkingofyouatChristmaswithawishthatiswarmandsincere.HaveawonderfulChristmasandjoyousNewYear!MerryChristmas!
规律的生活才是王道
大方呀
规律的生活才是王道,指规律的正向生活习惯。例如,keep住阅读、写作、早睡早起阅读,故事型的牧羊人之旅、月亮与六便士中人物能给予你力量,我如何感受到阅读的影响;解答型的小学问、糟边往事,给予思考的火花。写作,不仅仅是记录生活,更是从过往的经历,againandagain汲取经验。把思考写下来,促进更进一步的thinking。规律的睡眠作息。省去费力令自己早睡的麻烦。闭眼睡眠时,大脑分泌血清洗干净整
java程序员 thinkpad_JAVA程序员笔记本电脑推荐?
stratisplatform
java程序员 thinkpad
如果主要是做JAVA开发,那其实需要考虑的因素有:CPU性能必须过得去,因为java相对来说比较消耗CPU资源,当然是大型java应用,题主如果学习java的时候,倒不是特别重要,基本上2020年主流笔记本CPU都可以应对。内存,题主也说了,是因为idea特别吃内存才更换的笔记本,所以这里推荐16G内存起步,如果购买轻薄本的话,基本上内存就固定死了,不能更换;如果购买游戏本,那么可以增加到32G内
THINKPHP like between 的array用法
kang1919
TP
if($title!=''){$_where['title']=array('LIKE','%'.$title.'%');}if(''!=$url){$_where['url']=array('LIKE','%'.$url.'%');}if(0<$start_time&&$start_time<$end_time){$_where['create_time']=array('between',ar
基于ThinkPHP5的旧衣回收小程序——二手交换废物系统的设计与实现
IT实战课堂—x小凡同学
Java毕业设计项目 小程序
摘要:随着社会的快速发展和人们生活水平的提高,旧衣物数量迅速增加,传统的旧衣处理方式已难以满足现代社会的需求。为了有效减少资源浪费,提高旧衣物的利用率,本文基于ThinkPHP5框架设计并实现了一款旧衣回收小程序——二手交换废物系统。该系统通过线上平台,实现旧衣物的回收、分类、展示、交换等功能,为用户提供了一种便捷、环保的旧衣处理方式。本文将从系统需求分析、系统设计、系统实现、系统测试与评估等方面
thinkphp5支持php,如何让swoole完美支持ThinkPHP5呢
坎布里奇大脸猫
thinkphp5支持php
视频教程推荐TP5与workerman实战在线客服首先开启swoole的http服务开启swoole的http服务并设置提供给url访问页面的文件的根目录,代码如下。这样在浏览器只能访问…static下面的文件,而无法访问其他目录下的文件。http.serverset(['enable_static_handler'=>true,'document_root'=>"/usr/local/openr
ThinkPHP发邮件配置教程?群发功能安全吗?
Aoksend
服务器 运维 java 开发语言 sql 数据库 安全
ThinkPHP发邮件的注意事项?如何优化邮件发送的性能?无论是用户注册、密码重置还是消息提醒,发送邮件都是一个常见的需求。AokSend将详细介绍如何在ThinkPHP框架中配置和发送邮件,帮助开发者轻松实现邮件功能。ThinkPHP发邮件:了解需求在开始配置之前,我们需要明确邮件发送的具体需求。在ThinkPHP发邮件的过程中,常见的需求包括注册验证邮件、密码重置邮件、用户通知邮件等。了解这些
关于你,我不后悔~
伊多平安健康
从得知b超显示的侧脑室增宽问题开始,我只犹豫了几秒钟,七个月的身心一体,我马上就决定还是要你,后果自负。查资料,多次检查,漫长等待,虽然现在的结果并不是最好的,但回到当时,我也绝不舍得打掉你。现在说不清是什么原因,先天不足还是产伤,看着你一脸福相和无辜笑容,我的心里只会漾起无限爱与暖。网上有句话说的很好:IthinkyouaresoPerfectthatIloveyou.Iknowyouareno
thinkphp如何使用jwt
Coding Is Fun
php 安全 web安全
首先安装JWTcomposerrequirefirebase/php-jwt生成token数据准备准备一个需要的用户信息$account=['id'=>'root','password'=>123456];准备一个$payload$payload=["userinfo"=>$account,"exp"=>time()+3600*24//过期时间];不限于以下iss:发行人exp:到期时间sub:主
2020-08-13 To Succeed in The Long-Term, Think in 5, 10, or 20 Year Time Frames
春生阁
Humanscanbeprettygoodatshort-termthinking—butwe’renotverygoodatthinkingaboutthelong-termconsequencesofourpresentactions.Thepressuresofmodernlifemakeitincrediblydifficultforustoprojecttheimplicationsof
(二)终于出门的一天
洛嘉许
从过年到现在已经很久一段时间了,今天,我终于出门了。春分过后,昼长夜短。今天早早就醒来了,还以为八点多,透过窗外发现天已很亮了。长了好几个月的头发终于出去剪了,因为我的头发后面特别松蓬,剪完以后犹豫了一下要不要拉直,后来拉了和电了,要三百多,可贵了。弄了五个小时这样才搞完,坐到我屁股都麻痹了。至于我今天这发型,justsoso,Ithink。在第一轮把卷发的东西解下来,是挺卷起来的,我发现那是比较
Bert系列:论文阅读Rethink Training of BERT Rerankers in Multi-Stage Retrieval Pipeline
凝眸伏笔
nlp 论文阅读 bert reranker retrieval
一句话总结:提出LocalizedContrastiveEstimation(LCE),来优化检索排序。摘要预训练的深度语言模型(LM)在文本检索中表现出色。基于丰富的上下文匹配信息,深度LM微调重新排序器从候选集合中找出更为关联的内容。同时,深度lm也可以用来提高搜索索引,构建更好的召回。当前的reranker方法并不能完全探索到检索结果的效果。因此,本文提出了LocalizedContrast
Simple Pose: Rethinking and Improving a Bottom-up Approach for Multi-Person Pose Estimation
MatthewHsw
Simple Pose
arxiv:https://arxiv.org/pdf/1911.10529.pdfgithub:https://github.com/jialee93/Improved-Body-Parts原作者在知乎有讲解,链接既然是Rethinking,那么就要先只出需要rethinking的内容.文章主要针对于人体姿态估计中的bottom-up的方法,提出了关于bottom-up方法里的一些问题的思考:人
2014年高考英语江苏卷 - 阅读理解C
让文字更美
Mostdamagingly,angerweakensaperson’sabilitytothinkclearlyandkeepcontroloverhisbehaviour.Theangrypersonlosesobjectivityinevaluatingtheemotionalsignificanceofthepersonorsituationthatarouseshisanger.最具破坏
thinkphp6 数据库字段不存在的错误提示
tv002
在开发的过程中,我们经常会调整数据表的字段,于是经常会出现“字段不存在”的错误提示,fieldsnotexists:[status]这个问题是因为数据表调整了,但是thinkphp的表字段缓存还没有更新的原因,解决方法如下:1如果是文件缓存,尝试删除runtime目录下的所有缓存文件周易大学2如果开启redis之类的缓存,thinkphp也会把字段数据存到缓存中,也要清空;3如果问题还不解决,修改
多线程编程之join()方法
周凡杨
java JOIN 多线程 编程 线程
现实生活中,有些工作是需要团队中成员依次完成的,这就涉及到了一个顺序问题。现在有T1、T2、T3三个工人,如何保证T2在T1执行完后执行,T3在T2执行完后执行?问题分析:首先问题中有三个实体,T1、T2、T3, 因为是多线程编程,所以都要设计成线程类。关键是怎么保证线程能依次执行完呢?
Java实现过程如下:
public class T1 implements Runnabl
java中switch的使用
bingyingao
java enum break continue
java中的switch仅支持case条件仅支持int、enum两种类型。
用enum的时候,不能直接写下列形式。
switch (timeType) {
case ProdtransTimeTypeEnum.DAILY:
break;
default:
br
hive having count 不能去重
daizj
hive 去重 having count 计数
hive在使用having count()是,不支持去重计数
hive (default)> select imei from t_test_phonenum where ds=20150701 group by imei having count(distinct phone_num)>1 limit 10;
FAILED: SemanticExcep
WebSphere对JSP的缓存
周凡杨
WAS JSP 缓存
对于线网上的工程,更新JSP到WebSphere后,有时会出现修改的jsp没有起作用,特别是改变了某jsp的样式后,在页面中没看到效果,这主要就是由于websphere中缓存的缘故,这就要清除WebSphere中jsp缓存。要清除WebSphere中JSP的缓存,就要找到WAS安装后的根目录。
现服务
设计模式总结
朱辉辉33
java 设计模式
1.工厂模式
1.1 工厂方法模式 (由一个工厂类管理构造方法)
1.1.1普通工厂模式(一个工厂类中只有一个方法)
1.1.2多工厂模式(一个工厂类中有多个方法)
1.1.3静态工厂模式(将工厂类中的方法变成静态方法)
&n
实例:供应商管理报表需求调研报告
老A不折腾
finereport 报表系统 报表软件 信息化选型
引言
随着企业集团的生产规模扩张,为支撑全球供应链管理,对于供应商的管理和采购过程的监控已经不局限于简单的交付以及价格的管理,目前采购及供应商管理各个环节的操作分别在不同的系统下进行,而各个数据源都独立存在,无法提供统一的数据支持;因此,为了实现对于数据分析以提供采购决策,建立报表体系成为必须。 业务目标
1、通过报表为采购决策提供数据分析与支撑
2、对供应商进行综合评估以及管理,合理管理和
mysql
林鹤霄
转载源:http://blog.sina.com.cn/s/blog_4f925fc30100rx5l.html
mysql -uroot -p
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@centos var]# service mysql
Linux下多线程堆栈查看工具(pstree、ps、pstack)
aigo
linux
原文:http://blog.csdn.net/yfkiss/article/details/6729364
1. pstree
pstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552) &n
html input与textarea 值改变事件
alxw4616
JavaScript
// 文本输入框(input) 文本域(textarea)值改变事件
// onpropertychange(IE) oninput(w3c)
$('input,textarea').on('propertychange input', function(event) {
console.log($(this).val())
});
String类的基本用法
百合不是茶
String
字符串的用法;
// 根据字节数组创建字符串
byte[] by = { 'a', 'b', 'c', 'd' };
String newByteString = new String(by);
1,length() 获取字符串的长度
&nbs
JDK1.5 Semaphore实例
bijian1013
java thread java多线程 Semaphore
Semaphore类
一个计数信号量。从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。
S
使用GZip来压缩传输量
bijian1013
java GZip
启动GZip压缩要用到一个开源的Filter:PJL Compressing Filter。这个Filter自1.5.0开始该工程开始构建于JDK5.0,因此在JDK1.4环境下只能使用1.4.6。
PJL Compressi
【Java范型三】Java范型详解之范型类型通配符
bit1129
java
定义如下一个简单的范型类,
package com.tom.lang.generics;
public class Generics<T> {
private T value;
public Generics(T value) {
this.value = value;
}
}
【Hadoop十二】HDFS常用命令
bit1129
hadoop
1. 修改日志文件查看器
hdfs oev -i edits_0000000000000000081-0000000000000000089 -o edits.xml
cat edits.xml
修改日志文件转储为xml格式的edits.xml文件,其中每条RECORD就是一个操作事务日志
2. fsimage查看HDFS中的块信息等
&nb
怎样区别nginx中rewrite时break和last
ronin47
在使用nginx配置rewrite中经常会遇到有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的。
location /
{
proxy_pass http://test;
java-21.中兴面试题 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 , 使其和等于 m
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class CombinationToSum {
/*
第21 题
2010 年中兴面试题
编程求解:
输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,
使其和等
eclipse svn 帐号密码修改问题
开窍的石头
eclipse SVN svn帐号密码修改
问题描述:
Eclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能。但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的帐号、密码保存之后,就无法再变更了。
解决思路:
删除subclipse记录的帐号、密码信息,重新输入
[电子商务]传统商务活动与互联网的结合
comsci
电子商务
某一个传统名牌产品,过去销售的地点就在某些特定的地区和阶层,现在进入互联网之后,用户的数量群突然扩大了无数倍,但是,这种产品潜在的劣势也被放大了无数倍,这种销售利润与经营风险同步放大的效应,在最近几年将会频繁出现。。。。
如何避免销售量和利润率增加的
java 解析 properties-使用 Properties-可以指定配置文件路径
cuityang
java properties
#mq
xdr.mq.url=tcp://192.168.100.15:61618;
import java.io.IOException;
import java.util.Properties;
public class Test {
String conf = "log4j.properties";
private static final
Java核心问题集锦
darrenzhu
java 基础 核心 难点
注意,这里的参考文章基本来自Effective Java和jdk源码
1)ConcurrentModificationException
当你用for each遍历一个list时,如果你在循环主体代码中修改list中的元素,将会得到这个Exception,解决的办法是:
1)用listIterator, 它支持在遍历的过程中修改元素,
2)不用listIterator, new一个
1分钟学会Markdown语法
dcj3sjt126com
markdown
markdown 简明语法 基本符号
*,-,+ 3个符号效果都一样,这3个符号被称为 Markdown符号
空白行表示另起一个段落
`是表示inline代码,tab是用来标记 代码段,分别对应html的code,pre标签
换行
单一段落( <p>) 用一个空白行
连续两个空格 会变成一个 <br>
连续3个符号,然后是空行
Gson使用二(GsonBuilder)
eksliang
json gson GsonBuilder
转载请出自出处:http://eksliang.iteye.com/blog/2175473 一.概述
GsonBuilder用来定制java跟json之间的转换格式
二.基本使用
实体测试类:
温馨提示:默认情况下@Expose注解是不起作用的,除非你用GsonBuilder创建Gson的时候调用了GsonBuilder.excludeField
报ClassNotFoundException: Didn't find class "...Activity" on path: DexPathList
gundumw100
android
有一个工程,本来运行是正常的,我想把它移植到另一台PC上,结果报:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mobovip.bgr/com.mobovip.bgr.MainActivity}: java.lang.ClassNotFoundException: Didn't f
JavaWeb之JSP指令
ihuning
javaweb
要点
JSP指令简介
page指令
include指令
JSP指令简介
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
JSP指令的基本语法格式:
<%@ 指令 属性名="
mac上编译FFmpeg跑ios
啸笑天
ffmpeg
1、下载文件:https://github.com/libav/gas-preprocessor, 复制gas-preprocessor.pl到/usr/local/bin/下, 修改文件权限:chmod 777 /usr/local/bin/gas-preprocessor.pl
2、安装yasm-1.2.0
curl http://www.tortall.net/projects/yasm
sql mysql oracle中字符串连接
macroli
oracle sql mysql SQL Server
有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种资料库都有提供方法来达到这个目的:
MySQL: CONCAT()
Oracle: CONCAT(), ||
SQL Server: +
CONCAT() 的语法如下:
Mysql 中 CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起。
请注意,Oracle的CON
Git fatal: unab SSL certificate problem: unable to get local issuer ce rtificate
qiaolevip
学习永无止境 每天进步一点点 git 纵观千象
// 报错如下:
$ git pull origin master
fatal: unable to access 'https://git.xxx.com/': SSL certificate problem: unable to get local issuer ce
rtificate
// 原因:
由于git最新版默认使用ssl安全验证,但是我们是使用的git未设
windows命令行设置wifi
surfingll
windows wifi 笔记本wifi
还没有讨厌无线wifi的无尽广告么,还在耐心等待它慢慢启动么
教你命令行设置 笔记本电脑wifi:
1、开启wifi命令
netsh wlan set hostednetwork mode=allow ssid=surf8 key=bb123456
netsh wlan start hostednetwork
pause
其中pause是等待输入,可以去掉
2、
Linux(Ubuntu)下安装sysv-rc-conf
wmlJava
linux ubuntu sysv-rc-conf
安装:sudo apt-get install sysv-rc-conf 使用:sudo sysv-rc-conf
操作界面十分简洁,你可以用鼠标点击,也可以用键盘方向键定位,用空格键选择,用Ctrl+N翻下一页,用Ctrl+P翻上一页,用Q退出。
背景知识
sysv-rc-conf是一个强大的服务管理程序,群众的意见是sysv-rc-conf比chkconf
svn切换环境,重发布应用多了javaee标签前缀
zengshaotao
javaee
更换了开发环境,从杭州,改变到了上海。svn的地址肯定要切换的,切换之前需要将原svn自带的.svn文件信息删除,可手动删除,也可通过废弃原来的svn位置提示删除.svn时删除。
然后就是按照最新的svn地址和规范建立相关的目录信息,再将原来的纯代码信息上传到新的环境。然后再重新检出,这样每次修改后就可以看到哪些文件被修改过,这对于增量发布的规范特别有用。
检出