- 博客(255)
- 问答 (1)
- 收藏
- 关注
原创 Mac 下编译 PHP 扩展遇到的一些问题
MacOS 每次更新都会给编译 PHP 扩展带来一些麻烦,今天在安装 PCNTL 扩展的时候又遇上了,所以记录一下。 我的系统版本是 macOS High Sierra 10.13.3,PHP 版本是 PHP-7.1.7。 首先我从官网下载跟我系统版本相同的 PHP,默认下载到 Downloads 目录下面,之后运行 phpize,提示如下错误:grep: /usr/inclu...
2018-02-09 15:52:19 1234
原创 C语言模拟终端执行shell命令
程序只支持ls、cat和ps三个命令,思路是在用户输入一条命令之后fork一个新的进程,在新的进程里面执行命令。在我理解中,Mac的终端思路应该是类似的。在打开终端之后,程序会读取配置文件中目录下可执行的命令,然后根据用户的命令判断命令是否存在,如果存在,则fork出一个新的进程执行,否则返回“command not found”。本来觉得代码不复杂,但是写了很长时间,主要是两个问题,一个
2017-08-10 15:30:27 2187
原创 hdu 3397 Sequence operation(线段树)
这道题当年在大学的时候就卡得我痛不欲生,我一直觉得自己思路是对的,我第一次提交是在2013-08-03 05:17:00,然后从凌晨五点开始做,当时一直做不对。我觉得我的思路没错啊。之后这道题一直是我的一个心病,后来有空就去看一眼,想想是哪儿错了,就刚才2017-03-03 17:14:23,过了快四年,我突然看到代码里的错误了,然后AC。 哈哈! 不知道csdn抽什么风,
2017-03-03 17:27:16 325 1
原创 Mac下配置jar包
今天想写一个jdbc的demo,代码写完之后一直提示ClassNotFoundException:com.mysql.jdbc.Driver的错误信息,我猜应该是没有安装扩展,在PHP中经常遇到这种问题。我去下载了com.mysql.jdbc.Driver的驱动,但是不知道怎么安装进项目里,折腾了好久,最后发现在mac下应该把这个扩展放在/Library/Java/Extensions下。
2017-02-20 14:57:14 3974
原创 定时保存apache日志文件
之前在写代码的时候,发现apache的日志文件太大了,就想写个脚本定时备份apache日志文件。需要注意,文件在备份之后,如果直接删除原日志文件,因为apache还是持有原文件的句柄,如果不重启apache,后面的日志将会写入不进去。解决方案是不删除原日志文件,而是清空里面的内容。#!/bin/bash#初始化文件路径,日期等信息YEAR=`(date +"%Y")`MONTH=`(
2017-02-17 16:36:16 1429
原创 linux的一些常用命令
说起来是写PHP的,说起来是做服务端的程序员,说起来我是在mac上做开发,然而我对于linux命令完全不能算熟悉,基本上除了常用那些,大部分我都不了解。这里做个记录,都是一些linux下非常常用的命令。常用到什么程度呢?连我都知道……cd 这个在windows下也是一样,切换目录ls 展示当前目录,除了直接输入ls之外,还有ls -a(全部文件,包括隐藏文件) ls -l文
2017-02-16 15:37:13 273
原创 排序算法:希尔排序
这应该是最后一篇写排序算法的博客吧。希尔排序:逐次分割序列,每次对其中一小段进行插入排序。在数组基本有序的情况下,插入排序可以有很好的效率,通过这种方式来提高排序效率。思路上跟归并排序挺像的,都是分割成较小的子序列,对子序列排序,再逐渐扩大子序列的长度,直至子序列长度等于原序列本身。不同的地方是,分割的时候归并排序的子序列是紧邻的,希尔排序的子序列是有一个间隔的;希尔排序通过缩小间隔值,一
2017-02-13 15:08:23 276
原创 排序算法:堆排序
之前想把经典的排序算法都写一遍,最后没有写堆排序和希尔排序,现在给补一下。堆的概念:一个完全二叉树,只要任一节点都满足a[father]>=a[left_son]&&a[father]>=a[right_son],那么就称之为大顶堆,如果将>=改为堆排序的思想:对于一个长度为n的序列建堆,因为堆的顶部是最大或最小值,堆顶即为最大值,将改点取走,再对剩下的n-1个点建堆,堆顶则为次大值。逐次
2017-02-13 11:57:32 278
原创 PHP基础补全系列:SPL(数据结构)
SPL是PHP的标准库,无需安装,可以直接使用。这两天在优化系统里的一些东西的时候,发现有可能需要使用一些数据结构来实现,自己用PHP写总是感觉蠢蠢哒,所以查一下PHP的库。这里并不打算去具体介绍细节和写demo,就是做一个备忘SplDoublyLinkedList:双向链表SplStack:栈SplQueue:队列SplHeap:堆SplMaxHeap:大顶堆SplMin
2017-02-09 16:02:09 1206
原创 使用PHP魔术方法实现属性的set、get方法
之前对PHP中的魔术方法一直有了解,但是对于具体的使用场景则是模模糊糊的。今天了解到了一种使用魔术方法的场景,整理了一下写出来。假如一个类中具有较多的变量,对于每一个变量编写set/get方法是一件非常繁琐的事情,尤其对于数据库的查询结果,有时候字段可以很多。但是直接让程序调用类中的字段又不被推荐,这时候可以通过对__get、__set和__call方法的使用来解决这个问题。<?php
2017-02-08 15:25:34 518
原创 Codeforces Round #387 (Div. 2)
这段时间因为工作轻松一些,所以重新开始打codeforces了。不过成绩挺让人心寒的。A.水题,签到#include#includeint ab(int x,int y){ if(x-y>0) return x; else return y;}int main(){ int n,a,b; scanf("%d",&n); a=1;
2016-12-26 17:51:37 348 1
原创 PHP基础补全系列:异常处理
异常处理在PHP里也是个很有争议的问题,记得之前做项目的时候,关于异常处理和当时的同事讨论了很久。 不过今天不讨论这些东西,只是单纯做个记录。 这篇博客分三个部分:异常处理的基本使用扩展中抛出的异常,以PDO举例将错误信息委托给异常处理 一些需要注意的tips:可以使用set_exception_handler自定义异常
2016-12-06 18:20:52 305
原创 PHP基础补全系列:static
昨天晚上睡了大概两个小时。感觉今天一天整个人的状态都特别萎靡。 在手册中,static关键主要实现两个作用,1.定义静态变量和静态方法;2.实现后期静态绑定(延迟静态绑定) 定义静态变量和静态方法主要是需要注意声明和调用的方式。 1.手册中提到静态属性不能使用表达式声明。这个并不严谨,实际测试使用类似于 2+3 或者 "hello "."world" 这种方式
2016-12-05 16:24:19 322
原创 《现代操作系统》(第三版)P76页 生产者消费者模型的程序的理解
Pthread提供许多可以用来同步线程的函数。其基本机制是使用一个可以被锁定和解锁的互斥量来保护每个临界区。一个线程如果想要进入临界区,它首先尝试锁住相关的互斥量。如果互斥量没有加锁,那么这个线程可以立即进入,并且该互斥量被自动锁定以防止其他线程进入。如果互斥量已经被加锁,则调用线程被阻塞,直到该互斥量被解锁。 …… 除互斥量外,pthread提供了另一种同步机制:条件变量。互
2016-12-03 02:38:13 806
原创 PHP基础补全系列:Trait
这个系列的文章是用来学习PHP的一些不常用的语法特性,用来加强自己对PHP语法特性的理解。在大多数情况下都是作为自己的学习笔记,文章内容不会超出PHP手册,所以想了解相关特性的可以直接去看PHP手册。PHP手册链接PHP 5.4加入了trait。个人理解为trait在PHP中变相实现了多集成。但是我还不是很理解它的使用场景。<?phptrait TraitClass {
2016-11-17 17:34:55 376
原创 hdu 4513 吉哥系列故事——完美队形II(最大回文子串-manacher算法)
题意:求序列最大回文子串,且子串左侧必须单调非递增。我就是看这道题需要O(n)的复杂度才能过,所以特意学习了一下manacher算法。跟hdu3068一样,扫描的时候比较一下值的大小即可。#include#include#define N 200010int q_in[N],q[N],dp[N];int mark,line;int ans;int min(int x,int
2016-11-16 17:24:20 413
原创 hdu 3068 最长回文(manacher算法)
题意:给出一个字符串,求这个字符串的最长回文子串。关于manacher算法网上有很多讲解,我不再赘述。但是我看大部分讲解都没有解释为什么manacher算法的复杂度是O(n),我尝试着解释一下。代码的关键在这里:dp[i]=line>i?min(dp[mark*2-i],line-i):1;其中dp[i]表示以i为中心回文串向左右扩张的长度;line表示当前检索的回文串的最右边界(
2016-11-16 16:24:21 349
原创 hdu 2767 Proving Equivalences(强连通分量+缩点)
题意:给一个n个点,m条边的图,问最少增加多少条边,原图可以变成强连通图。思路:分两步,第一步,求双连通分量,我使用的是tarjan算法。我尝试着解释一下:对于一个强连通图G,从它的a点出发遍历全图,最终遍历的终点也是a,实际上在便利过程中可以出现多次回溯操作,即存在多个终点,但是因为在每次更新low[u]的值时都取最小的,所以最后更新的最小值一定时low[a]。第二步:缩点得到一个有向无
2016-10-25 11:19:54 365
原创 使用PHPWord读取Word文件并插入图片
刚才同学问我怎么读取一个word文件并插入图片,我觉得这种问题PHPWord肯定可以完成,但是他说弄不了。我就写了个demo看一下,事实证明是可以的。<?phpdate_default_timezone_set("Asia/Shanghai");require_once "PHPWord-develop/bootstrap.php";//读取文件$file = __DIR__
2016-10-20 16:15:23 18659 2
原创 hdu 1269 迷宫城堡(强连通)
题意:给定一个有向图,求该图是不是强连通的。思路:从某点出发,正向和反向两次遍历图,如果都能到达所有点,则该图是强连通的。强连通:在一个有向图G中,如果任意两点v1、v2存在v1到v2和v2到v1的路径,则称该图是强连通的。#include#include#define N 10005#define M 100005int path[2][M],next[2][M],head[
2016-10-20 14:52:47 425
原创 定时抓取ACM竞赛rank信息
今天有ACM的比赛,学弟学妹们参加了。我想看他们比赛的情况,但是感觉自己一会儿切过去刷新下页面看一眼太麻烦,就写了个程序定时抓取排行榜信息,如果学弟学妹做出新的题目之后,就弹窗提示我,免得我一会儿切一下,太蠢了。<?phpset_time_limit(0);$url = "http://board.acmicpc.info/ccpc2016/hdu_onsite.php";$sol
2016-10-19 15:24:09 628
原创 hdu 2665 Kth number(划分树模板题)
题意:给定一个长度为n的序列,进行m次查询,求出区间[l,r]中的第k大值。思路:划分树模板题。上学的时候做过这道题,当时看了下划分树的讲解,看得很头大,然后就一直放着了。十一回家的时候在高铁上没什么事情,就重新学习了一遍划分树。划分树是通过模拟快速排序,记录快速排序的过程。因为快速排序本质上就是讲一个很大的序列划分成一段一段的小序列分别排序,所以可以将这个排序的过程给记录下来,然后根据排
2016-10-17 10:59:24 355
原创 [hackerrank]Fibonacci Modified
题目链接:Fibonacci Modified题意:就是一个斐波那契变形的数列。麻烦的是结果可能非常大(可能超过十万位?),所以必须在空间和时间上都做一些优化。#include#include#define N 40005#define mod 10000void translate(char *s,int a[],int *a_ln){ memset(a,0,N*siz
2016-09-21 13:39:06 363
原创 一个统计PHP代码行数的小代码
想统计一下项目中一共有多少行代码,结果没找到什么好的工具,就自己写了一个。效率不怎么样。<?php/** * Created by PhpStorm. * User: luyanfeng * Date: 16/7/12 * Time: 下午1:45 *//** * @param $dir * @return int */function countLine($dir
2016-07-12 14:41:40 5247 2
原创 原型模式
设计模式入门系列这段时间看的设计模式,实现上都还可以,但是具体的使用场景总是感觉把握不好。 比如说现在写的原型模式。我现在确实没想到比较好的使用场景,自己想例子也没想出来,所以直接用书上的例子敲了要给demo。<?phpclass Sea{}class EarthSea extends sea{}class MarsSea extends sea{}class Plains{}c
2016-05-25 16:59:52 280
原创 抽象工厂模式
设计模式入门系列在我的理解中,抽象工厂模式更像是在工厂方法模式基础上增加了一层。工厂方法模式解决了创建不同的类的问题,抽象工厂模式解决了创建一组相关的类的问题。以下面的代码为例:当客户端在获取一个Conuntry类的时候,还希望能够获取与该Country相关的language类。抽象工厂中包含两个相关类的实现方式,相当于通过抽象工厂描述了这种相关性。<?phpinterface Language
2016-05-24 16:29:32 334
原创 工厂方法模式
在之前的项目中,如果需要创建某一类型的类的实例,我通常会专门写一个用来创建该类的类。以下面的例子为例,为了创建BMW和Benz的实例,我通常会建一个类似于CarFactory的类,通过传入一个参数在该类的接口(比如说getInstance)中返回想要创建的类。 这种创建类的方式叫做简单工厂模式。这么做的一个问题是在getInstance中需要加入很多的判断,每增加一种新的类型就需要在switch
2016-05-24 14:05:58 320
原创 单例模式
设计模式入门系列单例模式保证了在代码中的任何部分引用的都是同一个对象。这样的特性让人很容易想到它的两个用途:1. 节约内存 2. 用来保存一些在代码执行之后不想被释放的数据(比如说统计代码执行次数或者生成某些不能重复的序列号)。但是这最直观的两点在PHP中都不是很容易实现。在每次请求结束之后,PHP的所有资源都会回收。即使是使用最频繁的数据,在一次请求中一般也不会用到太多,节约内存并不明显;又因为
2016-05-18 11:02:08 349
原创 PHP中获取当前类名、方法名、函数名魔法常量(第一次用markdown)
PHP中获取当前类名、方法名、函数名的几个魔法常量(第一次尝试用markdown写博客)关于常用魔术常量的介绍可以直接参考PHP手册:连接 附上一个demo: ···php
2016-04-19 15:14:47 475
原创 poj 1947 Rebuilding Roads(树型DP)
题意:给定一棵树,问最少删除多少条边,可以出现一个含有p个节点的子树。 思路:可以删除的的边当作背包,问最少需要多小的包可以删除特定数量的节点。题目转变成了树型背包问题。需要注意有可能1不在最后的子树里面。我没想到什么好的解决方法,干脆以所有节点作为根都计算了一遍。数据范围比较小,所以也过了。 我AC之后看到了别人更加优雅的解法:点击打开链接。不过现在太困了,等
2015-05-09 05:37:45 544
原创 poj 1155 TELE(树型DP)
没有注意时间,已经写了三个小时了。 好久时间没有做过背包问题,就找了一道练练手。再加上xcode用的还不是很熟练,硬是写了三个小时。 题目的时限和空间放的很宽,我写的很丑陋的代码也A了。 题意:电视台要播放节目,一共有n个节点,其中有m个中转站,电视台连接不同节点需要消耗费用,叶节点是观众,观众会支付费用观看节目,问在不赔钱的前提
2015-05-09 02:53:14 412
原创 poj 3667 Hotel(线段树)
昨天跟学弟做练习赛的题目,好长时间没有做题,看到题目不想写代码。 比赛结束后写的。 做这道题最大的收获应该是熟悉了xcode的debug方式吧,代码中出了一些bug,然后坚持用xcode调试,最后在熟悉了xcode的debug之后,终于找到了问题。 好长时间没做题,线段树的一些写法已经忘得差不多了,而且对bug不够敏感。在修改和查找的函数里,延迟标记都忘记了往下
2015-05-06 13:10:31 576
原创 mongoDB:mongoimport数据导入的问题
今天因为改bug需要,要把生产环境数据库里的数据导入本地数据库,我用mongoimport导入,一直失败。后来尝试了其他方法,mongorestore,加上--jsonArray都不行。 最后的解决方法是,用mongoexport将服务器上的数据导出,然后用mongoimport导入。
2015-01-30 16:01:57 1387
原创 PHP学习第N天:用PHPExcel将Excel转化为数组输出
这些文章都是用来记录php学习经历的,会有很多bug和错误,参考需谨慎。 工作第N天,再过两天就该发工资了,激动一下! 利用PHPExcel将读取和导出Excel文件非常方便,但是初次使用会有很多各种各样的小问题,我将这两天遇到的问题和解决方法整理了一下,希望能够对大家有所帮助。 在整理过程中我参考和使用了大量的互联网上的资料和代码。包括但不仅
2014-09-06 01:08:44 2815 2
空空如也
PHP安装mongoDB驱动失败
2015-06-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人