阿里云 - 开发者云招聘 Java 研发/专家(3个坑、北京杭州均可)
工作经验 | 大中型项目三年到五年 |
---|---|
学历 | 统招本科 |
主要技能 | Java |
工作地点 | 北京 / 杭州 |
级别 | P6~P7 |
想做业务 | 负责阿里云开发者云的业务支撑 |
想做架构 | 整个阿里云用户生态底层架构与服务支撑(挑战巨大) |
有兴趣的简历直接发我邮箱 mengkang.zmk@alibaba-inc.com
薪资大家得自己谈,P6~P7的薪资范围很大,阿里云基本上16~19薪
不管合适与否我一定及时给大家回复
工作经验 | 大中型项目三年到五年 |
---|---|
学历 | 统招本科 |
主要技能 | Java |
工作地点 | 北京 / 杭州 |
级别 | P6~P7 |
想做业务 | 负责阿里云开发者云的业务支撑 |
想做架构 | 整个阿里云用户生态底层架构与服务支撑(挑战巨大) |
有兴趣的简历直接发我邮箱 mengkang.zmk@alibaba-inc.com
薪资大家得自己谈,P6~P7的薪资范围很大,阿里云基本上16~19薪
不管合适与否我一定及时给大家回复
在 PHP 中,当我们在获取命令行参数时,可以通过遍历$argv
来获取,其实呢是有规范可循的,也就是 GNU C-style parser for command line options 。
比如使用命令wget
下载文件时,使用下面的一些方式来指定option
都可以
wget http://mengkang.net/a.jpg -O b.jpg
wget http://mengkang.net/a.jpg -Ob.jpg --tries=3 -b
wget http://mengkang.net/a.jpg -Ob.jpg --tries=3 -bvd
我们整理下command line options
的规则,首先参数分为短选项名和完整选项名,而且一些还有映射关系。
char
字符,只能1字节,不能超过1字节,比如上面的第四个命令的最后一个参数就不知道是一个选项还是三个选项了。-
)开始-
后面跟多个选项名--
)开始我翻开自己的
git commit
一查,这代码没有年代,歪歪斜斜的每行都写着 "业务驱动" 四个字。我横竖睡不着,仔细看了半夜,才从字缝里看出字来,满屏都写着两个词是 "CURD Boy"!
最近准备一个教程,案例的过程中准备了如下代码碎片,演示解析http scheme
char *parse_scheme(const char *url)
{
char *p = strstr(url,"://");
return strndup(url,p-url);
}
上面是通过strndup
的方式,实际就是malloc
,所以最后也需要free
。
我们知道栈上的数组也能用来存储字符串,那我们可以改写成下面这样吗?
char *parse_scheme(const char *url)
{
char *p = strstr(url,"://");
long l = p - url + 1;
char scheme[l];
strncpy(scheme, url, l-1);
return scheme;
}
大多数人都知道不能这样写,因为返回的是栈上的地址,当从该函数返回之后,那段栈空间的操作权也释放了,当再次使用该地址的时候,值就是不确定的了。
那我们今天就一起探讨下出现这样情况的背后的真正原理。
前几天在分享"实现自己的wget"的时候,因为我们的请求是一次性的,http 头里设置的Connection: Close
。在HTTP/1.1
为了提升HTTP 1.0
的网络性能,增加了keepalive
的特性。那么浏览器在请求的时候都会加上Connection: Keep-Alive
的头信息,是如何实现的呢?
我们知道在服务端(nginx)可以通过设置keepalive_timeout
来控制连接保持时间,那么http
连接的保持需要浏览器(客户端)支持吗?今天咱们一起来通过java.net.HttpURLConnection
源码看看客户端是如何维护这些http
连接的。
#include <stdio.h>
int test(int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10) {
return arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7 + arg8 + arg9 + arg10;
}
int main() {
printf("%d", test(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
return 0;
}
假如有这样的一个需求,有个日期,想要截取获得其年份。我们用 php 可以使用explode
,也可以使用strtok
$a = "2019-09-10 00:00:00";
echo strtok($a,"-"); // 2019
可能大家对strtok
不太熟悉,它的作用是用-
来分割$a
获取子串,循环调用可以达到和explode
差不多的效果。具体可以看下官方手册里面的 demo https://www.php.net/manual/zh/function.strtok.php
我之所以用strtok
呢,是因为C 语言里也有这个函数,这个函数比较“怪”,每一次调用,是将字符串中找到的-
替换为\0
,然后返回标记字符串的首地址。
为什么 php 手册里经常说某个函数是二级制安全的?我们平常使用函数的时候也没发现有什么区别呀,那么二进制安全到底是什么意思呢?
<?php
echo strlen("abc"); // 3
echo strlen("abc\0"); // 4
echo strlen("abc\0d"); // 5
echo strlen("abc\0def"); // 7
临时收到某部门的盛情邀请作为他们部门篮球赛的强力外援,不用说,肯定是我得分能力吸引了他们。最后才知道原来是本不能邀请外援,但才6人,少一个,正好他们组妹子也有一套球服,其他人也穿不了,所以邀请了我。
作为一名深度 phper,我如果要黑咱们 php,就像说自己母校差一样,大家不要见外。
这几天观察错误日志发现有一个数据反序列化的notice
错误,实际情况我是从缓存中读取数据然后反序列化,因为反序列化失败,所以实际每次都是去数据库取的值。背后性能影响还是挺大的。
在获取cookie
时,Java
是不会对数据做任何处理,但是php
则会默认进行一次urldecode
操作,这导致了,两边系统里面获取同一cookie
时,结果不一致的 bug。
类似的问题 PHP 在解析外部变量时的一个 BUG
很多时候,最大的优势在某些情况下就会变成最大的劣势。PHP 语法非常灵活,也不用编译。但是在项目比较复杂的时候,可能会导致一些意想不到的 bug。
那是时候体验一下代码静态扫描工具啦。
最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家帮忙解答下
主要包含如下知识点
好的语义表达是团队协作中高效迭代的润滑剂,好的语义表达是线上未知代码问题排查的指南针。
不要让其他人读不懂你的代码,其他人可能就是一周后的你。时刻以“如果你写的这段代码出现故障,一个陌生人接手你的代码需要多久能处理完这个bug”来监督自己。
日常中应该多多刻意提升自己语义表达,百利而无一害。那么我们应该从哪些细节去做好语义表达呢?
使用 optimizer_trace 可以更加详细的看到 mysql 的整个执行流程,作为分析优化思路,验证优化思路非常有帮助。
需求:现在需要统最近一个月阅读量最大的10篇文章
Mysql 版本 :5.7
mysql> show create table article_rank\G;
*************************** 1. row ***************************
Table: article_rank
Create Table: CREATE TABLE `article_rank` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`aid` int(10) unsigned NOT NULL,
`pv` int(11) unsigned NOT NULL DEFAULT '1',
`day` int(8) NOT NULL COMMENT '日期 例如 20171016',
PRIMARY KEY (`id`),
KEY `idx_day` (`day`),
KEY `idx_day_aid_pv` (`day`,`aid`,`pv`),
KEY `idx_aid_day_pv` (`aid`,`day`,`pv`)
) ENGINE=InnoDB AUTO_INCREMENT=240776593 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)