文章归档

我的分享

JetBrains家的IDEA真不便宜

先贴出来正版购买链接

JetBrains公司的那些IDE真的是非常的好用,No.1的水准!一直都非常喜欢这家的产品,也难怪价格会稍微贵那么不止一点点了!
IntelliJ IDEA专为Java打造,当然还有为PHP打造的PHPStorm,为javascript打造的WebStorm,为Python打造的PyCharm等等。
不过今天不是来吹嘘JetBrains家的产品的,我是来吐槽自己买不起的事实。[/摊手]

阅读剩下更多

默认配图
数据库

初探MongoDB安全之RBAC(基于角色的访问控制)

写在开头的一段话:我是一名忠实的SQL玩家,虽说MySQL并没有达到精通的级别,但在日常使用中还是会经常出现“这个表要是NoSQL的话就好办多了”的想法。所以说,我认为无论是站在关系型数据库还是非关系性数据库的立场上,二者并不是相对立的,而且我觉得应该用“相辅相成”来形容二者的关系。

通过在《MongoDB 教程|菜鸟教程》轻量级的了解了一下MongoDB的基础知识,我在自己电脑上安装并使用了这款NoSQL软件。很明显地,读别人的教程只能是迅速的、简单的和容易理解的。也正是这样,我发现了其中有一块并没有提及!那就是并没有说要登录数据库啊。

阅读剩下更多

默认配图
算法

实现寻找两个字符串的最大公子串的方法

昨天在做某兔的校招笔试题的时候遇到的题目,就这一个编程题,然而当时却没有拿下,把它和字符串匹配中的子串包含给弄混了,哎!
废话少说,上代码!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function MaxSubCommonStr($str1,$str2){
$a = str_split($str1); //字符串分割成数组
$b = str_split($str2);
$len1 = strlen($str1); //字符串的长度
$len2 = strlen($str2);
$maxlen = 0; //最大计数器
for($i=0;$i<$len1;$i++){
for($j=0;$j<$len2;$j++){
if($a[$i] == $b[$j]){ //找到第一个相等的字符
$as = $i; //拷贝字符串1的起点
$bs = $j; //拷贝字符串2的起点
$count = 1; //有一个相等的字符了
while ($as + 1 < $len1 && $bs + 1 < $len2 && $a[++$as] == $b[++$bs])
$count++; //往后比较,每匹配一个计数+1,直到其中一个查完或者出现不相等
if($count > $maxlen){ //当本次计数长度大于最大记录时
$maxlen = $count; //更新最大计数长度
$start1 = $i; //更新本次比较的字符串1起点
$start2 = $j; //更新本次比较的字符串2起点
}
}
}
}
return substr($str1,$start1,$maxlen); //直接返回字符串1,从$start1起点往后$maxlen最大匹配长度个数的子串
}

$str1 = 'abcdefgabc';
$str2 = 'defghijabc';
echo MaxSubCommonStr($str1,$str2);
?>

没什么含金量,只是写出来练练手,思路照搬过来的。

阅读剩下更多

默认配图
杂谈

[合集]面试中遇到的那些提问

参加了好几家公司的面试了,一直也没来得及将这些问题整理一下,今天正好不想到处跑了,所以先在这里写下这一篇文章,以后会不定期更新。

非技术篇:

  1. 先来一个自我介绍吧(废话! =_=!)
  2. 用3个词组评价你自己
  3. 说一说你一生中感到最有成就感的一件事
  4. 说一说你曾经遇到过的最沮丧的一件事
  5. 说说你的优缺点
  6. 说说你的父母都是做什么的?
  7. 你有多少个兄弟姐妹?
  8. 你为什么选择来参加我们公司的招聘
  9. 你对加班的看法和出差的看法,以及你对加班和出差的最大忍耐极限
  10. 你觉得你在哪一方面比较优秀?
  11. 别人都是怎么评价你的?
  12. 在同一个Team中,当别人的意见和自己的意见冲突的时候,你会怎么办?
  13. 拿一个你最熟悉的项目来讲讲,它的架构、设计、遇到的问题以及是如何解决的
  14. 你对我们的开发团队有什么期望吗?
  15. 最后,你有什么想要问我的?

    阅读剩下更多

默认配图
算法

PHP常用算法的方法实现(冒泡、选择、插入、快排、二分查找)

以前说起写算法,基本上都是拿C语言来写,因为用C可以更清楚的理解各种排序算法和数据结构。今天遍换成使用PHP语言来写几个常用的算法。
这次要写的算法包括:

  • 冒泡排序
  • 插入排序
  • 选择排序(直接)
  • 快速排序
  • 二分查找

冒泡:

<?php
$arr = array(4,3,5,6,8,0,10,15,11);
echo implode(' ',$arr);
//冒泡排序 最坏 平均O(N^2) 最好O(N)
function BubbleSort($arr){
    $length = count($arr);
    if($length <= 1){
        return $arr;
    }
    for($i=0;$i<$length;$i++){
        for($j=0;$j<$length-$i-1;$j++){
            if($arr[$j] > $arr[$j+1]){
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $tmp;
            }
        }
    }
    return $arr;
}
echo "\nBubbleSort:\n";
echo implode(' ',BubbleSort($arr))."\n";
?>

阅读剩下更多

默认配图
PHP

一种较好的实现PHP异步发送邮件的实现

前些天在写我的TR-System(社团招新管理系统)的时候,用到了邮箱验证用户注册,也就是注册成功后,需要访问收到的邮件中的URL进行用户激活。这个事件发生在用户提交注册请求之后,系统需要立即发送一封邮件用于激活,但是系统在调用PHPMailer的时候需要进行SMTP连接邮箱系统(用的腾讯企业邮),往往在这个时候会出现等待的情况。如果让用户来承担这个等待时间,体验也太差了!,没见过哪个系统上注册个用户,还需要慢慢等待系统告诉我到底有没有注册成功。
一开始在写的时候,直接在POST请求中处理,写入数据库后就调用sendEmail方法,情况是这样的:
1.提交注册 --> 2.写入数据库 --> 3.发送Email --> 4.注册成功。
这样在用户看来是有一个漫长的等待的。
实际上应该为:
1.提交注册 --> 2.写入数据库 --> 3.注册成功。 ||||||||||||||||||-->发送Email
这样的才是一个拥有良好用户体验的系统 ^_^ 。
若是在Java等环境下,咱们可以很好利用多线程,分出来一个任务让另一个线程去完成。
但是!PHP这个单线程环境下,没有new Thread来搞这个事情啊。 不过,换一个角度,线程不行的,我就给个新进程呗。当然不是在当前进程创建新进程。

阅读剩下更多

默认配图
算法

通用笔试-PHP测试编程题[2题]

水仙花数

题目描述:
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。

输入
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。

输出
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开; 如果给定的范围内不存在水仙花数,则输出no; 每个测试实例的输出占一行。

样例输入
100 120 300 380

样例输出
no 370 371

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
echo "Please Input\n";
$in = '';
while($in != "\n"){
$first = false;
// $stdin = fopen("php://stdin",'r');
// $in = fgets($stdin);
$in = fgets(STDIN);//使用标准输入
$args[] = explode(' ',trim($in));
}
// fclose($stdin);
array_pop($args);
foreach ($args as $item) {
if($item[0] <100 || $item[1]>999 || $item[0]>=$item[1]) {
echo "输入参数不合法!\n";
exit(0);
}
$start = $item[0];
$end = $item[1];
$res = array();
while($start <= $end){
$a = floor($start/100);
$b = floor(($start-$a*100)/10);
$c = $start%10;
if($start == ($a*$a*$a+$b*$b*$b+$c*$c*$c)){
$res[] = $start;
}
$start += 1;
}
echo empty($res)?"No\n":implode(' ',$res)."\n";
}
?>

第二题:

阅读剩下更多

默认配图
学习笔记

You have new mail - Mac OS

奇了怪了,莫名其妙!平时打开终端都没怎么注意,今天发现打开终端的时候,除了常规的上次登录提示,居然有一句“You have new mail”紧接着在下面出现了。
平时都不用自带的邮件.app的 打开邮件,却没有啥。
好的,本着好奇的心理,开始摸索。

阅读剩下更多

默认配图
Linux

[修复]wordpress WP_Image_Editor_Imagick 指令注入漏洞

漏洞描述:该修复方案为临时修复方案,可能存在兼容性风险,为了防止WP_Image_Editor_Imagick扩展的指令注入风险,将wordpress的默认图片处理库优先顺序改为GD优先,用户可在/wp-includes/media.php的_wp_image_editor_choose()函数中看到被修改的部分
云盾不提供自动修复,咱们自己来修复吧。根据提示,我们打开media.php 找到相关函数的内容:


$implementations = apply_filters( ‘wp_image_editors’, array( ‘WP_Image_Editor_Imagick’, ‘WP_Image_Editor_GD’ ) );

做如下顺序调整:


$implementations = apply_filters( ‘wp_image_editors’, array( ‘WP_Image_Editor_GD’, ‘WP_Image_Editor_Imagick’ ) );

正如上面的描述所说,临时方案嘛。Wordpress官方不做处理的话,你每次升级了程序,都会出现这样的报错,每次都得自己去修改。不过如果不在乎这个提示的话,不理也行!

附当时的图片一张
wp-Image 注入漏洞

阅读剩下更多

默认配图
Linux

nginx+php-fpm环境下的mysqld痛不欲生

问题背景

今天突然发现自己的服务器又出现了Mysql服务器的崩溃,重启一下便恢复了。
但是!下午2点的时候重启的,晚上回来一看,数据库又挂了!!!十分恼火啊!再重启一下,什么?直接启动不了啦!
发生报错:

[root@iZ28l1ca1vhZ ~]# service mysqld start
Starting MySQL.The server quit without updating PID file (/usr/local/mysql/data/iZ28l1ca1vhZ.pid).                                         [FAILED]
[root@iZ28l1ca1vhZ ~]# service mysqld restart

排查过程

查看mysqld的日志:

阅读剩下更多

默认配图
Web

js判断两个块元素的相交与否

之前在做阿里笔试的时候,其中就有那么一个题,要求你用js写一个函数,用来判断两个Div是否相交,当时在那个上面并没有很快的写出来,结果时间到了。回头好好又想想,还是把他写一下,就算是最笨的方法,也得实现。

阅读剩下更多

默认配图
编程语言

C(C++)、Java、PHP区别函数参数传递

这篇文章,我专门测试了一下C、Java、PHP三种编程语言中对于函数(方法)参数传递的问题

一、C/C++篇

首先说明一下,这里仅在C语言下测试,C++类似,只不过在C++中多了一个传引用(&),其性质还是指针,传递过程中可以看作是使用别名。
看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//
// main.c
// TestOfVlaue
//
// Created by anthony on 16/4/16.
// Copyright © 2016年 Anthony. All rights reserved.
//

#include <stdio.h>
//C语言测试
void prt1(int v) {
printf("方法内执行后的结果:%d\n",v);
}
void prt2(int v[],short int len) {
for (int i=0; i<len; i++) {
printf("a[%d]:%d\n",i,v[i]);
}
}
void ch1(int v) { //按值传递
++v;
prt1(v);
}
void ch2(int *v) { //按地址(指针)传递
++(*v);
prt1(*v);
}
//void ch3(int &v) { //引用传递 C里面木有&(引用)C++中可用,底层还是指针
// ++v;
// prt1(*v);
//}
void ch4(int v[],short int len) { //改变数组的值
for (int i=0; i<len; i++) {
v[i]++;
}
}
void test1(int v) { //测试整型变量
printf("测试单个值:类型:int,值为:%d\n",v);
ch1(v);
printf("执行ch1()的结果:%d\n",v);
ch2(&v);
printf("执行ch2()的结果:%d\n\n",v);
}
void test2(int v[],short int len) { //测试整型数组
printf("测试数组:类型:int,值为:\n");
prt2(v, len);
ch4(v,len);
printf("方法内执行后的结果:\n");
prt2(v, len);
printf("\n");
}
int main(int argc, const char * argv[]) {
int a = 10;
int b[] = {1,2,3};
test1(a); //测试变量a++
test2(b, 3); //测试数组b各元素++
test1(b[0]); //测试数组b[0]++
return 0;
}

运行结果:

阅读剩下更多

默认配图
Linux

CentOS 6下更新PHP版本到5.5后与Nginx发生的小事情

今天在写API的时候用到了php中新版本的jsonencode()方法,在5.4以后支持了不对中文进行Unicode编码,而我在服务器上的php版本还停留在yum源包自带的5.3版本,只有升级来满足需要了。
首先,找了一些关于升级PHP的文章,各不相同,我还是坚持简单、易操作的方法,使用yum来更新。
当然,yum update php 是完全不能解决的,因为它告诉我5.3是最新的版本了。不能怪它,因为没人告诉它今年是哪一年了^
^!
这个不行,肯定要换一个源包了。。
不过首先是要卸载已经安装的php。在这之前,先看看当前安装的PHP有哪些依赖包吧:

1
yum list installed | grep php

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@iZ28l1ca1vhZ scuec]# yum list installed | grep php
php.x86_64 5.3.3-46.el6_6 @updates
php-bcmath.x86_64 5.3.3-46.el6_6 @updates
php-cli.x86_64 5.3.3-46.el6_6 @updates
php-common.x86_64 5.3.3-46.el6_6 @updates
php-fpm.x86_64 5.3.3-46.el6_6 @updates
php-gd.x86_64 5.3.3-46.el6_6 @updates
php-imap.x86_64 5.3.3-46.el6_6 @updates
php-ldap.x86_64 5.3.3-46.el6_6 @updates
php-mbstring.x86_64 5.3.3-46.el6_6 @updates
php-mcrypt.x86_64 5.3.3-4.el6 @epel
php-mysql.x86_64 5.3.3-46.el6_6 @updates
php-odbc.x86_64 5.3.3-46.el6_6 @updates
php-pdo.x86_64 5.3.3-46.el6_6 @updates
php-pear.noarch 1:1.9.4-4.el6 @base
php-xml.x86_64 5.3.3-46.el6_6 @updates
php-xmlrpc.x86_64 5.3.3-46.el6_6 @updates

上面这些本来有的,安装新版本后还是加上去比较好办,对!
接着卸载php吧

阅读剩下更多

默认配图
返回顶部