V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  feiyuanqiu  ›  全部回复第 35 页 / 共 41 页
回复总数  815
1 ... 27  28  29  30  31  32  33  34  35  36 ... 41  
2015-05-12 00:56:50 +08:00
回复了 brando 创建的主题 PHP PHP 执行后的结果再重新排序的问题
... sql 就可以处理了,跟楼上的一样

select * from table2 t2 join table1 t1 on t2.tid=t1.id where ordertime like '{$ordertime2}%' order by t2.id
2015-05-11 17:29:37 +08:00
回复了 WKPlus 创建的主题 Python 单循环两行代码打印出三角形
这个题有个问题,当 N >= 10 之后,应该怎么显示呢?
是显示 10 个 10 ?(这样就不是三角形了,这一行有 20 个字符)
或者其他样式显示?(这样整个规则跟前面的就不一致了)

不考虑 N >= 10 的 php 代码:

用字符串:
for ($i=1; $i <= $_GET['N']; $i++)
printf("%s<br>", str_repeat($i, $i));

不用字符串:
for ($i=1, $base = 1; $i <= $_GET['N']; $base+=pow(10, $i), $i++)
printf("%s<br>", $i*$base);
2015-05-11 12:43:24 +08:00
回复了 Nixus 创建的主题 PHP PHP 写代码直接处理 MySQL 中的大量数据,卡死
应该是 MySQL 卡住了。
之前做过类似的功能,公司的跟单人员的电话录音软件是买的,保存的录音数据只有拨出号码,呼叫号码,通话开始时间、结束时间等

然后要把录音跟具体的跟单人关联上,因为我们规定的跟单人必须要在跟客户交流后记录一条日志,就用的日志的记录时间和客户号码与录音的时间和号码去匹配,执行的流程大概是这样的:
1、脚本取出过去一段时间(这个值是设置的)所有还没有跟跟单人匹配的录音
2、脚本取出过去一段时间(这个值是设置的)所有还没有绑定录音的跟单日志
3、把录音弄成按号码为 index 的关联数组(每个号码的数据量就比较少了),循环跟单日志,按照每个日志的客户号码去匹配录音,匹配到的录音数据就 unset 掉
4、最后把数据一次性存入表,切忌循环操作数据库,匹配的录音更新匹配状态

功能很简单,就是做的时候很蛋疼,我一般是想要很精确的那种匹配,但是因为跟单日志是跟单人员自己弄的,里面的时间不可能准确,所以匹配录音和日志的时候就用了一个时间段,所有落到这个时间段的同一个号码的录音都认为是跟单人员跟客户交流的
2015-05-10 14:26:30 +08:00
回复了 zhufree 创建的主题 编程 网易云课堂数据结构——二叉搜索树( 2015.5.9-10)
之前看算法的时候,二叉搜索树我觉得还行,挺好理解的,我是倒在 avl 树那里的,根本都想不通旋转是怎么弄的
嗯调了一下,怎么说呢,这个代码里面有很多小问题,比如:
1、类方法调用没有用 this
2、$this->user,$this->users 混乱
3、handshake 方法里面的变量 $buffer 没有声明赋值,实际上它应该是参数 $data
4、handshake 方法里面的 $skey 变量在后面的调用中写错了
...

后面的我都没记录了,都是小问题,改了就能运行了:

http://ww4.sinaimg.cn/large/6856d0b6gw1erwxp8kij3j211e0pjqbi.jpg

附上代码
服务端:
<?php
error_reporting(E_ERROR);
class ws
{
public $sock;
public $socks;
public $users;

function send($socket, $msg)
{
if ($socket === "all") {
foreach ($this->users as $key => $value) {
socket_write($this->users[ $key ]['client'], $msg, strlen($msg));
}
}
socket_write($socket, $msg, strlen($msg));
}

function handshake($socket, $data)
{
$buffer = $data;
$secretkey = substr($buffer, strpos($data, 'Sec-WebSocket-Key:') + 18);
$skey = trim(substr($secretkey, 0, strpos($secretkey, "\r\n")));
//生成返回的握手包key,后面的字符串是固定的,不知道谁规定的。。。
$newskey = base64_encode(sha1($skey . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", TRUE));
$httpheader = "HTTP/1.1 101 Switching Protocols\r\n";
$httpheader .= "Upgrade: websocket\r\n";
$httpheader .= "Connection: Upgrade\r\n";
$httpheader .= "Sec-WebSocket-Accept: " . $newskey . "\r\n\r\n";
$this->send($socket, $httpheader);
$key = $this->search($socket);
$this->users[$key-1]["new"] = FALSE;

return TRUE;
}

function search($socket)
{
return array_search($socket, $this->socks);
}

function close($socket)
{
socket_close($socket);
$key = $this->search($socket);
unset($this->socks[ $key ]);
if ($key !== 0) {
unset($this->users[$key-1]);
}

return TRUE;
}

function decode($buffer) {
$decoded = null;
$len = ord($buffer[1]) & 127;
if ($len === 126) {
$masks = substr($buffer, 4, 4);
$data = substr($buffer, 8);
} else if ($len === 127) {
$masks = substr($buffer, 10, 4);
$data = substr($buffer, 14);
} else {
$masks = substr($buffer, 2, 4);
$data = substr($buffer, 6);
}
for ($index = 0; $index < strlen($data); $index++) {
$decoded .= $data[$index] ^ $masks[$index % 4];
}
return $decoded;
}

function __construct($ip, $port)
{
f('start...');
$this->sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
f('create socket...');
socket_set_option($this->sock, SOL_SOCKET, SO_REUSEADDR, 1);
f('set option...');
socket_bind($this->sock, $ip, $port);
f('bind socket...');
socket_listen($this->sock);
f('listen socket...');
$this->socks[] = $this->sock;
while (1) {
$write = NULL;
$expect = NULL;
$sockscache = $this->socks;
if (socket_select($sockscache, $write, $expect, 0) === false) {
die("socket_select() failed, reason: " . socket_strerror(socket_last_error()) . "\n");
}

foreach ($sockscache as $sockcache) {
if ($sockcache === $this->sock) {
if (($client = socket_accept($this->sock)) !== false) {
f('accept socket...');
$this->socks[] = $client;
$this->users[] = array("client" => $client, "name" => "", "new" => TRUE);
}
} else {
$length = socket_recv($sockcache, $data, 2048, 0);
f('receive socket...');
$key = $this->search($sockcache);
if ($length < 7) {
$name = $this->users[$key-1]["name"];
$this->send($sockcache, "$name 已经退出。");
$this->close($sockcache);
f('close socket...');
} else {
if ($this->users[$key-1]["new"]) {
$this->handshake($sockcache, $data);
f('handshake...');
} else {
//信息处理
$data = $this->decode($data);
echo $data;
die();
}
}
}
}
usleep(500);
}
}
}

function f($msg = '')
{
static $start = false;
if (!$start) {
ob_start();
$start = true;
}
echo date('Y-m-d H:i:s') . ":{$msg}\n";
ob_flush();
}

$websocket = new ws('127.0.0.1', '10077');


客户端:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
//<![CDATA[
var ws = new WebSocket('ws://localhost:10077/phpstorm/test2.php');

ws.onopen = function (event) {
var data = event.data;
console.log('onopen:', data, event);
};
ws.onerror = function (event) {
var data = event.data;
console.log('onerror:', data, event);
};
ws.onclose = function (event) {
var data = event.data;
console.log('onclose:', data, event);
};
ws.onmessage = function (event) {
var data = event.data;
console.log('onmessage:', data, event);
};
//]]>
</script>
</body>
</html>
websocket 需要先握手建立连接之后才能通信,你握手那里是怎么处理的呢
server.php 只是一个验证性的 demo 吧? 如果不长,可以发出来看看
2015-05-08 04:17:32 +08:00
回复了 z21victor 创建的主题 问与答 自己写的 bug,自己都不想改,今天竟然萌生了离职的念头
@konakona 我估计都不是 bug,就是写的时候自己都搞不清写的是什么东西,程序结构混乱不清晰,只图实现需求,写完之后自己不能确定程序是有问题还是没问题,自己在调试的时候就能感觉到这个代码的杂乱臃肿,即使测试通过了心里还是觉得没底,认为这是个定时炸弹随时可能爆炸。

原因也很简单,太菜了。比如:
1、需求开始的时候因为上线压力、与策划人员的沟通等问题没时间好好理解需求,没法设计好程序架构;
2、需求进行的时候随着对需求的理解的深入,以及策划人员对需求的变更,表结构数据结构甚至程序流程一直在随之变化,写代码就成了抗洪救灾式哪里不对改哪里,代码结构很混乱,类方法分工不清晰,各种耦合和重复,最后只能保证能实现需求的要求,不能保证没有副作用,具体会有什么副作用不好说,要测试出来才知道...
3、需求上线之后只要程序能用就基本不能修改或重构,因为一段时间之后,其他依赖于这个功能的需求会一层层地添加进来,任何对老程序的修改都可能会引起其他功能的问题,重构的成本太高,需要测试所有跟这个程序影响的数据相关的功能

这样做的结果也很简单:
上线后如果真的没问题那就是万幸,没有必要一定不再去碰这些代码;上线就出 bug 也很幸运,可以马上修改,然后就可以睡踏实觉了;过了两三个月半年,有一天突然谁谁谁吼了一句这里的数据怎么不对,一路查下来发现是这个代码造成的那简直就是噩梦,可以两三天不用睡觉了。长期下来心理压力就会过大,对工作的态度变得消极厌倦,产生辞职重来的思想(类似于系统越来越卡实在受不了了就会选择重装系统)
唯一的好的方面是会驱使人自发地去了解怎样才能做出好的程序设计,会开始阅读 代码大全、程序员的修炼之道、重构、代码整洁之道 等书,开始追求清晰明了的代码风格

不要问我是怎么写出这些的
2015-05-07 14:07:47 +08:00
回复了 Lilacs 创建的主题 正则表达式 求个正则表达式,自己不会写
说实话我觉得还不如就直接用 find_in_set 在数据库里面查询
2015-05-07 04:08:24 +08:00
回复了 eightqueen 创建的主题 PHP 为什么 PHP 总是被喷性能很差?
性能真不是什么大问题,能让 php 性能成为瓶颈的时候你们的老板估计要开心得跳起来
php 被喷主要是:
1、php 本身就不是个严谨的语言
2、php 从业者的素质确实有些良莠不齐
3、人云亦云跟风狗,整天有事没事拿 “PHP 是最好的语言” 到处晃

第一点就不多说了,天天这样吐槽那样吐槽的帖子也有很多了
第二点,现在基本没有哪个学校会教 php 了吧,新的 php 程序员基本是自学或是转职做程序员从培训学校速成的,老一届的优秀的 php 程序员渐渐富集到 百度腾讯新浪 这几个还在使用 php 的大公司去了或是在小公司创业公司做技术总监这些高级职位了,那么大量的下层岗位就由我这样的半桶水程序员来担当了,这类人的问题就是基础不扎实,只会跟 php 语言有关的东西,经常会问一些很初级的问题,导致程序员圈子整天黑 php,然后这又导致 php 对新人的吸引力越来越低,一个新人跑到论坛问该学什么语言呢?80%会说 python,10%会说 csapp、clrs、sicp...然后又导致 php 的从业者越来越少(真是感觉现在 php程序员越来越少,不管是从论坛的招聘帖情况来看,包括前公司从去年到今年只招到了一个人,干了三个月走了,到我上个月辞职,一个在国内同类行业中排得上号的员工总数接近两千人的企业的 php 程序员就只剩 3 个...),然后导致这些企业不得不(或是为了上市融资显得高大上)从 php 转向 java(因为实在招不到人了)
反观 java,现在有哪个学校不教 java?哪个大公司不招 java?移动开发这么火,薪资叼叼的,我都经常在想我毕业的时候要是不进 web 部门进的是聊天工具部门现在也应该是月入一狗的码农了啊


而且,在小公司做 php 真的感觉很 low 很像民工啊!一会要你改 html 页面这里左移 1px 了,一会让你写存储备份 SQL 数据了,一会哪个哪个部门的老大上来说他们想要个什么什么功能这么简单今天下午能上线吧,一会新来的产品经理不熟悉业务提了一堆狗屎一样的需求你要挨个挨个给他纠正了,一会前同事几年前留下的一个 1000 行的函数又出 bug 了测试环境死活不能重现生产环境不允许调试没有权限查看线上数据你就跟福尔摩斯一样一行行检查代码用反证法推理哪里有问题...捱到下班回去什么也不想干,书也不想看,项目也不想做,结果技术一点长进也没有,要找工作了发现连一点能拿来要工资的东西都没有,完全浪费了时间。工作中是任人使唤谁都可以投诉你一把的苦力,网络中是到处被黑歧视链的最底端,这种生活简直是见了鬼
@paranoidboy 想多了吧...
秒杀请求到达服务器的时候,检查商品是否已经到了秒杀开始时间,没到就返回错误
到了时间就检查商品的秒杀状态,如果商品没有被秒杀那这个客户就抢到了,然后更新商品的秒杀状态
之后的请求来的时候检查商品状态已经被秒杀了,自然也就秒不到了
2015-05-06 15:29:26 +08:00
回复了 lvfujun 创建的主题 问与答 js 一个神奇的现象?求解.
异步的吧,alert(window.aaaa) 的时候 load 事件还没有触发?
2015-05-06 15:15:14 +08:00
回复了 binarymann 创建的主题 问与答 jQuery ajax 返回 Uncaught SyntaxError: Unexpected token :
@binarymann

1、需要接口那边支持,一般是你传过去两个参数 回调函数名 和 查询参数,比如你主楼的这个:
?callback=jQuery110205438157829921693_1430892961914&_=1430892961916

回调函数名是 jQuery110205438157829921693_1430892961914,查询参数是 _=1430892961916

如果接口支持 jsonp,就应该返回类似这样的数据:
jQuery110205438157829921693_1430892961914({'type':'test'});

也就是接口会返回一段 js 代码,调用你传入的回调函数,传入的实参就是接口数据,所以需要本地实现 jQuery110205438157829921693_1430892961914 这个函数

如果你是用的 jQuery,直接就按照普通的 ajax 调用的方式处理数据就行了,如果没有用 jQuery,就需要这样做:

2、你需要在本地实现这个函数 jQuery110205438157829921693_1430892961914,用来处理接口返回数据,比如:
var jQuery110205438157829921693_1430892961914 = function (data) { console.log(data); }

3、为 body 添加 script 元素,开始执行请求:
var script = document.createElement('script');
script.src = 'http://xxx.com?callback=jQuery110205438157829921693_1430892961914&_=1430892961916';
document.body.appendChild(script);
2015-05-06 14:42:57 +08:00
回复了 binarymann 创建的主题 问与答 jQuery ajax 返回 Uncaught SyntaxError: Unexpected token :
@binarymann 用 jsonp 啊... jsonp 就是用来解决跨域问题的
2015-05-06 14:30:28 +08:00
回复了 binarymann 创建的主题 问与答 jQuery ajax 返回 Uncaught SyntaxError: Unexpected token :
这个地址返回的是 json 格式的数据,你代码里面指定的处理方式是 jsonp,所以就报错了

$.get('http://www.randomtext.me/api/', function (res) { console.log(res); }, 'json');

这样就行了
2015-05-03 06:37:02 +08:00
回复了 weichuangye 创建的主题 酷工作 我心目中好的工程师是什么样的?致我今后的同事
“你们让我做的功能我都实现了”、“这个没有在需求列表里面写清楚。。。”

哈哈,上个月辞职的公司就是这个样子的,我觉得这个真不只是程序的问题

1、公司一大就需要事事按流程行事,出了问题也是层层找责任,线上出了问题,要找责任归属,程序 BUG 还好说,是程序和测试的锅
但是需求性的问题呢?策划会说我需求里都没写这个,你们为什么要这么做?所以我们就会严格按照需求里面的要求来干活,绝不多做一点,因为做多了出问题了就是程序的锅
当然一般合理的需求变更还是要给改的,但是一定要策划书面备注之后才改...人和人的信任啊...

2、很多时候策划们提需求的时候对他的产品脑子里只有一个大概的轮廓,常常是程序做出一个原型之后他用一遍觉得哪里哪里要改,让你改,你改了之后他又觉得哪里有问题了又要你改。但是程序不是只做他一个人的需求,每天有很多事要做,每天有进度要求,每个月要根据完成的需求数评定 KPI,因为策划的不专业和不用心,就要程序来承担更多的工作量这是不能接受的,所以这时候就会对策划说:“这个没有在需求列表里面写清楚。。。”
事实上大部分的改动还是都给改了的,用加班的时间。
归根到底这是制度原因,上面考察工作量的人是不会知道你做这个需求的时候具体经过是怎样的,他们对着统计数据,只看你的每月需求数,需求级别,开始时间完成时间,是不是超期了,超期了就扣 KPI。
或者不需要 preg_match_all 的返回值:

if (preg_match_all($pattern, $article, $matches, PREG_SET_ORDER)) {
$last = array_pop($matches);
var_dump($last);
}
你看一下 preg_match_all 的文档,它会返回匹配的次数,你直接用这个次数就可以获取到最后一个匹配:

<?php
$article = <<<EOT
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<img src="//cdn.v2ex.co/avatar/2cd8/7697/76017_large.png?m=1412760421" class="avatar" border="0" align="default">
<img src="//cdn.v2ex.co/avatar/2cd8/7697/76017_large.png?m=1412760422" class="avatar" border="0" align="default">
<img src="//cdn.v2ex.co/avatar/2cd8/7697/76017_large.png?m=1412760423" class="avatar" border="0" align="default">
<img src="//cdn.v2ex.co/avatar/2cd8/7697/76017_large.png?m=1412760424" class="avatar" border="0" align="default">
</div>
</body>
</html>
EOT;

$pattern = '/<img[^>]+src\\s*=\\s*[\'\"]([^\'\"]+)[\'\"][^>]*>/im';

// 设置 flag 为 PREG_SET_ORDER
if ($match = preg_match_all($pattern, $article, $matches, PREG_SET_ORDER)) {
var_dump($matches[--$match]);
}

// 不设置 PREG_SET_ORDER
if ($match = preg_match_all($pattern, $article, $matches)) {
var_dump($matches[0][--$match]);
}
2015-05-03 05:04:50 +08:00
回复了 Meediy 创建的主题 PHP PHP 判断某值为 1,数组中含有某元素,为 0 不含有某元素
没太看懂你的代码,不知道你跑没跑过,目测这个代码是不能运行的。
然后,你的描述也没怎么看懂...(如果某值为1,数组的子数组中含有某元素,如果0,那么不含有某元素)这里某值和某元素是什么对应关系?含有某元素的意思是检测通过的时候就往原始数组里面添加某元素吗?检测不通过就去掉原数组中的某元素吗?算了我不猜了
2015-04-24 16:13:38 +08:00
回复了 z742364692 创建的主题 机械键盘 poker2 哪里最便宜!
个人觉得这个键盘还是不太方便,没有 F 区和方向键,用起来还是不太方便。下一把键盘我准备试试 Nano75
2015-04-24 12:57:22 +08:00
回复了 Nicksxs 创建的主题 PHP 关于 thinkphp 的求助(求轻拍
不能连接数据库你可以看下这几个地方:
1、ps -ef | grep mysql 看下 mysql 启动没有
2、ls /var/lib/mysql/mysql.sock 看下这个存不存在
3、mysql -u(你在php数据库连接配置文件里面设置的数据库用户名) -p 看下能不能登进去
4、如果数据库在远程,还要看下 iptables 的配置,是不是把远程访问数据库给 DROP 了
1 ... 27  28  29  30  31  32  33  34  35  36 ... 41  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5179 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 37ms · UTC 06:03 · PVG 14:03 · LAX 23:03 · JFK 02:03
Developed with CodeLauncher
♥ Do have faith in what you're doing.