Browsed by
月份:2014年11月

[转]编程进阶

[转]编程进阶

ACM队不是为了一场比赛而存在的,为的是队员的整体提高。

大学期间,ACM队队员必须要学好的课程有:

 

l C/C++两种语言

l 高等数学

l 线性代数

l 数据结构

l 离散数学

l 数据库原理

l 操作系统原理

l 计算机组成原理

l 人工智能

l 编译原理

l 算法设计与分析

 

除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。

 

以下学习计划每学期中的内容不分先后顺序,虽说是为立志于学习ACM的同学列的知识清单,但内容不限于ACM的知识。英语之类与专业相距较远的课程请自行分配时间,这里不再列举。

 

大一上学期:

 

必学:

1. C语言基础语法必须全部学会

a) 推荐“语言入门”分类20道题以上

b) 提前完成C语言课程设计

 

2. 简单数学题(推荐“数学”分类20道以上)

需要掌握以下基本算法:

a) 欧几里德算法求最大公约数

b) 筛法求素数

c) 康托展开

d) 逆康托展开

e) 同余定理

f) 次方求模

 

3. 计算几何初步

a) 三角形面积

b) 三点顺序

4. 学会简单计算程序的时间复杂度与空间复杂度

5. 二分查找法

6. 简单的排序算法

a) 冒泡排序法

b) 插入排序法

7. 贪心算法经典题目

 

8. 高等数学

 

以下为选修:

 

9. 学会使用简单的DOS命令(较重要)

a) color/dir/copy/shutdown/mkdir(md)/rmdir(rd)/attrib/cd/

b) 知道什么是绝对路径与相对路径

c) 学会使用C语言调用DOS命令

d) 学会在命令提示符下调用你自己用C语言编写的程序,并使用命令行参数给自己的程序传参(比如自己制作一个copyfile.exe实现与copy命令基本功能一致的功能)

e) 学会编写bat批处理文件

10. 学会Windows系统的一些小知识,如设置隐藏文件,autoRun.inf的设置等。

11. 学会编辑注册表(包括使用注册表编辑器regedit和使用DOS命令编辑注册表)

12. 学会使用组策略管理器管理(gpedit.msc)组策略。

 

大一下学期:

1. 掌握C++部分语法,如引用类型,函数重载等,基本明白什么是类。

2. 学会BFS与DFS

a) 迷宫求解(最少步数)

b) 水池数目(NYOJ27)

c) 图像有用区域(NYOJ92)

d) 树的前序中序后序遍历

3. 动态规划(15题以上),要学会使用循环的方法写动态规划,同时也要学会使用记忆化搜索的方法。

a) 最大子串和

b) 最长公共子序列

c) 最长单调递增子序列(O(n)与O(n log n)算法都需要掌握)

d) 01背包

e) RMQ算法

4. 学会分析与计算复杂程序的时间复杂度

5. 学会使用栈与队列等线性存储结构

6. 学会分治策略

7. 排序算法

a) 归并排序

b) 快速排序

c) 计数排序

8. 数论

a) 扩展欧几里德算法

b) 求逆元

c) 同余方程

d) 中国剩余定理

9. 博弈论

a) 博弈问题与SG函数的定义

b) 多个博弈问题SG值的合并

10. 图论:

a) 图的邻接矩阵与邻接表两种常见存储方式

b) 欧拉路的判定

c) 单最短路bellman-ford算法dijkstra算法。

d) 最小生成树的kruskal算法与prim算法。

 

11. 学会使用C语言进行网络编程与多线程编程

 

12. 高等数学

 

13. 线性代数

a) 明确线性代数的重要性,首先是课本必须学好

b) 编写一个Matrix类,进行矩阵的各种操作,并求编写程序解线性方程组。

c) 推荐做一两道“矩阵运算”分类下的题目。

 

以下为选修,随便选一两个学学即可:

14. (较重要)使用C语言或C++编写简单程序来调用一些简单的windows API,或者在linux下进行linux系统调用,其目的是明白什么是API(应用程序接口)。

 

15. 网页设计

a) 学习静态网页技术(html+css+javascript)

b) 较具有艺术细胞的可以试试Photoshop

c) php或其它动态网页技术

 

16. 学习matlab,如果想参加数学建模大赛的话,需要学这个软件。

 

大一假期(如果留校集训)

1. 掌握C++语法,并熟练使用STL

2. 试着实现STL的一些基本容器和函数,使自己基本能看懂STL源码

3. 图论

a) 使用优先队列优化Dijkstra和Prim

b) 单源最短路径之SPFA

c) 差分约束系统

d) 多源多点最短路径之FloydWarshall算法

e) 求欧拉路(圈套圈算法)

4. 进行复杂模拟题训练

5. 拓扑排序

6. 动态规划进阶

a) 完全背包、多重背包等各种背包问题(参见背包九讲)

b) POJ上完成一定数目的动态规划题目

c) 状态压缩动态规划

d) 树形动态规划

7. 搜索

a) 回溯法熟练应用

b) 复杂的搜索题目练习

c) 双向广度优先搜索

d) 启发式搜索(包括A*算法,如八数码问题)

8. 计算几何

a) 判断点是否在线段上

b) 判断线段相交

c) 判断矩形是否包含点

d) 判断圆与矩形关系

e) 判断点是否在多边形内

f) 判断点到线段的最近点

g) 计算两个圆的公切线

h) 求矩形的并的面积

i) 求多边形面积

j) 求多边形重心

k) 求凸包

 

 

 

选修

9. 可以学习一种C++的开发框架来编写一些窗体程序玩玩(如MFC,Qt等)。

10. 学习使用C或C++连接数据库。

 

大二一整年:

1. 数据结构

a) 单调队列

b) 堆

c) 并查集

d) 树状数组

e) 哈希表

f) 线段树

g) 字典树

2. 图论

a) 强连通分量

b) 双连通分量(求割点,桥)

c) 强连通分量与双连通分量缩点

d) LCA、LCA与RMQ的转化

e) 二分图匹配

i. 二分图最大匹配

ii. 最小点集覆盖

iii. 最小路径覆盖

iv. 二分图最优匹配

v. 二分图多重匹配

f) 网络流

i. 最大流的基本SAP

ii. 最大流的ISAP或者Dinic等高效算法(任一)

iii. 最小费用最大流

iv. 最大流最小割定理

3. 动态规划多做题提高(10道难题以上)

4. 数论

a) 积性函数的应用

b) 欧拉定理

c) 费马小定理

d) 威乐逊定理

5. 组合数学

a) 群论基础

b) Polya定理与计数问题

c) Catalan数

6. 计算几何

a) 各种旋转卡壳相关算法

b) 三维计算几何算法

7. 理解数据库原理,学会SQL语句

8. 学好计算机组成原理

 

9. 学习Transact-SQL语言,学会使用触发器,存储过程,学会数据库事务等。

10. 图论二

a) 网络流的各种构图训练(重要)

b) 最小割与最小点权覆盖等的关系(详见《最小割模型在信息学竞赛中的应用》一文)

c) 次小生成树

d) 第k短路

e) 最小比率生成树

11. 线性规划

12. 动态规划更高级进阶

13. KMP算法

14. AC自动机理论与实现

15. 博弈论之Alpha-beta剪枝

 

 

选修,有相关兴趣的可以学一下:

 

16. 自学C#或Java做一个项目,比如C++/C#/Java考试系统之类的。

17. 先做一些小游戏玩玩,然后可以学一下DirectX或者OpenGL,或者可以试试XNA游戏框架。

18. 了解一下游戏引擎相关的知识

 

其中的寒假假期最好:

1. 自学完离散数学

2. 自学概率论的部分章节

3. 自学操作系统部分章节

 

大三、

1. 巩固之前的知识,进行一遍大复习。

2. 一些如蚁群算法,遗传算法,模拟退火算法等人工智能方面应用较广的随机性算法。

3. 把编译原理上学的东西应用到编程中:如DFA,NFA,还有语法分析的各种方法等。

 

当你按上面那些一步步走过来时你已经是牛人了,后面要学的东西,就是由牛人自己来发掘的了。

[转]How-to-learn-PHP-the-best-way

[转]How-to-learn-PHP-the-best-way

一个PHP菜鸟的自学规划

作者:PHP100_Zeroing  来源:PHP100  日期:2014-11-12 23:36:00

       我看了关于这方面的很多资料,我几乎没有看到过一个满意的答案,我该构建一个什么样的体系,如何构建,从哪开始?

我是经济专业的,没有参加过任何编程相关的课程,所以我是零基础开始学习,下面就是我学习网站开发(使用PHP)的过程,如果你有基础或已经了解一些,你可以跳过相关步骤。建议你看完整篇文章,确保你认同这份计划,你再开始你的学习之旅。

一个人独立学习PHP可能有点难,但是这也未尝不可。学习PHP,大概只需要1-2个月的时间,这还是算上了你有几天没有学习。如果你是一个上班族,你只是在空余时间学习,可能时间还要长一点。

我用了几乎一年的时间才到达我现在的水平,中间走了很多弯路,我看了很多后来发现根本没用的视频和教材,因为我从没有看到过一个好的学习向导。这篇文章就是为了帮助大家少走弯路,减少找资料和学习方法的时间。

 

Step1:2-4天

学习HTML/CSS的入门知识,了解这些代码,对于初学者来说最简单的第一步,并且让你学习的内容立马看到成效。相反,一上来就学习语法,编写这样的代码实在无聊,因为你都可以用计算器得出结果。

 

Step2:1-2天

利用视频教程,PDF文档,学习PHP头几门课程,知道构建网站的一些基本工具,下面你就要学习更多PHP提供的功能了。另外,在这一阶段你要找到一款你喜欢的代码编辑器。

 

Step3:2-4天

这一步对于有一定编程基础的人来说很容易,但对于那些零基础的人就比前阶段的入门步骤难一些了。回到你之前学习的PHP课程,完成整个课程的内容,这一步虽然有些难,但不要灰心和放弃,因为在下一步我们会有大量的更酷的内容。

 

Step4:6-9天

学习完这些课程并完成相应的练习,你就基本已经是一个Web开发者了,如果你能做到这些你就应该很自豪了。你要培养这方面的兴趣,基本上所有人都足够聪明,可以学会Web开发,关键是兴趣和激情。在这个时候,你希望可以有一个更高级的代码编辑器,比如Netbeans。

 

Step5:1天

现在可以学习一些AJAX的知识了,现在不知道这是什么都没关系。

 

Step6:1天

这时候应该学习面向对象的知识,让你的代码更整洁。它会增强代码的复用,把代码模块化。

 

Step7:2-3天

用PHP做一个CMS系统,一旦你完成了它,再返回头,用面向对象的方式实现它。如果这个对你有困难,没有关系,随着你的学习一直做它,不要过分纠结于一个难点,然后就放弃了。

 

Step8:7-9天

学习做一个登录系统,可以参考YouTube上的PHPAcademy课程。

 

Step9:2-3天

利用JQuery把你的网站做的更有趣,互动性更强一些,JQuery是一个简单但非常重要的库,可以让你的网站更棒。所以,学习一些JQuery的指导课程,它是JavaScript的一个库,我这里没有让大家学习整个JavaScript,因为JavaScript和PHP很相似,在一开始你不会用到完整的JavaScript。

 

Step10:3-5天

学习MVC框架的工作原理,我推荐CodeIgniter,它对于新手是很好的框架。

 

Step11:视情况而定

构建你的网站,这个需要看你想做的网站的复杂程度。记得你要使用面向对象的方法,使用MVC框架。

 

Step12:2-3天

完成了网站之后,你要试着将它发布到网上。对于这点,你可以看看如何创建一个云服务器,我没有做过这个,但PHPAcademy上有这方面很好的指导,一定会帮到你。

 

Step13:永远

学习永无止境,经常复习之前学习的内容,你依然可以从中学到新技巧,回忆起你忘记的内容。

原文:http://www.quora.com/What-is-the-best-way-to-learn-PHP-1/answer/Evan-Gow

译文:http://www.php100.com/html/it/focus/2014/1112/7791.html

翻译:PHP100_Zeroing

Ubuntu 下用 phpstorm IDE 和 XDEBUG 在XAMPP的服务器下配置 调试运行环境

Ubuntu 下用 phpstorm IDE 和 XDEBUG 在XAMPP的服务器下配置 调试运行环境

折腾了两天总算折腾好了,其实很多地方都很简单只有一个地方有些困难 那就是 使用 Zero-Configuration Debugger来调试PHP代码 首先说前面的步骤 本人系统环境Ubuntu14.04LTS XAMPP版本 1.8.3-5

安装PHPSTORM

在官网上下载对应的版本 我的是 Phpstorm8 然后运行目录下的bin/phpstorm.sh 即可进行安装 不用root权限安装即可  然后 这里提供一个序列号LICENSE

安装后新建一个PHP Project即可 工程根目录放在本地的服务器 DocumentRoot里即可

安装并配置 xdebug for php

首先 在你的服务器目录下新建一个php脚本 里面输入

然后在网页上访问它,把所有信息拷贝下来 复制到这里 http://xdebug.org/wizard.php 然后点击 Analyze my phpinfo() output 就可以获得安装xdebug所需要你做的所有事项 follow下去即可 如果没法访问那个网站 ,你可以执行下面的脚本 把xdebug-your-version换成适合你的php版本的xdebug即可 我的是2.2.6

没有报错就说明安装没问题 报错了 就可能是安装包有问题 或者你的配置有问题,另外特殊说明一下,由于xampp自带了xdebug 所以 我们下载的新版本xdebug模块不能直接叫xdebug.so应该改个名字 比如上面我改为 xdebug_new.so如果你的 extensions目录下没有xdebug 则不用改名 改名是为了防止被覆盖掉

下面我们配置php的配置文件让其支持xdebug 在最下面加入这些配置信息

这些设置配置好之后 重启服务器 然后再次查看phpinfo如果你看到了xdebug 那个模块的50多个配置信息 就正确了

如上图 显示出这个就OK了 PHP 的Xdebug功能已配置完全

PHPStorm 的配置 并且启用 Zero-configuration-debugging

我们打开刚刚建立的工程 ,然后点 File-Settings 在打开的窗口找到PHP 双击然后 设置PHP Interpreter 按照我的xampp的配置 我的 php 在这里/opt/lampp/bin 输入好之后 会自动检测php版本和debugger类型及版本

 

然后,其它配置都不用管 先直接去Debug 双击Debug 然后 我们可以看到默认的设置 ,xdebug端口号和刚刚我们在php.ini里设置的一样,如果不一样 你要修改为同一个端口哦~~ 现在不用管 只要把旁边的 can accept external connections 打上勾 就OK了

然后我们现在就可以开始使用 Zero-configuration-debugging 来debug了~~~ 也就是说,你不用配置任何其它的东西(当然你配置了不会影响这个功能的可用性 我刚开始以为是什么Debugger都不配置才能用这个功能,在这里也卡了一阵子 摔!)

下面是操作 首先保证你用的浏览器是Firefox 或者 GoogleChrome 这里仅以Chrome为例

参考这篇文章也可以 需要国际网

1. Install the Xdebug helper extension for Chrome from the Chrome webstore: 点击左边那个链接可以直接下载并且安装所需的插件 然后我们需要进行简单的设置  注意这里一定不要设置出问题 不然 会导致一直链接不上 = =还有 php.ini的文件一定不要写错了 ,写错了更悲剧 ,,我就是把remote_host写为 127.0.0.0卡了好久 自己还没发现

按照这样的方式设置插件

在白名单里添加 localhost 和 127.0.0.1 因为我的电脑 localhost 没有定义为127.0.0.1所以它认为这两个是不同的东西 ,因此我就都加上了,然后 ,IDEkey选对 然后 就可以开始调试了  现在去phpstorm打开Zero-configuration-debugging调试功能 方法为点击右上角像电话一样的图标 或者是点击Run->StartListeningforPHPConnections 然后 在你的代码里设置一个断点(前提是你现在有PHP的代码文件了 没有的话 或者还不会写的话 可以用下面的代码 :

在第一行打个断点 然后和后续步骤一样)

现在 切换到浏览器 (googleChrome)然后 访问刚刚那个PHP脚本所在的服务器目录下 例:localhost/test_proj/index.php 然后 可以看到一直小虫子一样的图标在地址栏出现 左键点击它 并且在弹出的菜单选择  Debug 然后刷新一下网页  就会发现网页一直显示在加载,然后切换回phpstorm能看到弹出了窗口 或者是 debug区有了变量出现 那么就说明 成功了 截图如下 这两种情况都是成功了

一些问题的解法

  1. 在StartListeningForPHPDebugConnections的时候,出现端口被占用的信息,你需要做的是给xdebug换一个端口 在配置文件里 和你的IDE都要换
  2. 在开启Debug之后刷新页面没有看到上面的两种情况  那么你要好好检验一下你的xdebug配置是否正确 还有你的插件里是否把localhost 和 127.0.0.1加为白名单
  3. 在ValidateServer的时候遇到问题 

    参考这篇文章 http://stackoverflow.com/questions/24869916/intellij-php-remote-debugging-failed-to-execute-validation-script    然后 注意 你Validate的时候 选择 Inplace 并且保证设置的目录为你的工程下的目录, WebServerRoot URL设为 http://localhost/Your-Project-Folder  然后就可以验证你的Server的可用性了

恩,弄了 7个小时总算弄好了 ,希望这个文章能给正在配置这个的民那桑一些帮助~~~~~jyane

Laravel 学习笔记 #3 First Laravel PHP Application

Laravel 学习笔记 #3 First Laravel PHP Application

前两篇文章我们已经设置好了PHP的环境 和 laravel搭建的必备环境,下面就正式进入laravelPHP的学习了~~ 首先是我们的第一个laravel工程

Cat Application

截图如下

上面是效果图,下面就开始coding~

建立 laravel工程

首先 我们用laravel installer 建立一个laravel工程 ,注意此过程由于需要联网下载相关代码文件,需要科学上网 不然可能会导致建立失败。

输入如下指令 建立工程

工程建立好之后 切换到工程的目录下, 然后运行这个指令

在经过了前两篇文章的配置后,你应该能正常运行这个指令了 ,如果不能运行 出现报错信息,参见我上面几个教程 ,修复你的PHP环境

刚刚的指令给我们提供了一个不用开apache Or Nigix服务器程序就可以运行PHP网页的能力,在浏览器里输入 localhost:8000就可以打开了 最初的页面是一个laravel的logo 和 一句话 You have arrived 看到这样的页面说明你的laravel工程建立好了 下面就是代码的编写

第一个Helloworld 工程

Laravel采用的coding方式 也是 MVC的方式 即 Model View Controller 首先 我们从路由开始研究 ,这里路由最初我也不理解是什么意思 不过现在就当作是用户访问相应网址的时候会触发的响应即可 ,我们先写一个最简单的 访问根目录就会输出一个字符串的代码

打开 route.php j将原来的代码全部注释掉 然后添加如下的代码  这段代码的意思十分的简单 就不做解释了 这个理解了就可以继续往下看了

首先看一下代码的格式 理解这个代码应该没有困难 ,主要是把这个格式记住即可

下面 看一个动态应用的实例 要求显示 用户访问该网站根目录下的 /cat/$ID

会输出 Cat $ID 其中 $ID为动态变化的值 下面是代码:

对这个代码做一个简单的解释 ,其实现在我自己也不能完全理解 因为我是小 白TAT

首先还是路由的代码的格式  cats/{id} 这个地方的意思就是 : 当用户访问  /cats/XX时候 触发下面的代码操作 function($id) 这个就是把 id这个参数传给该函数 ,然后 ,在下面写的这一句代码就很好理解了 这时,我们就可以去浏览器测试了  输入 localhost:8000/cats/VOID 你就会看到  浏览器输出了  Cat #VOID 这样的字样 这样我们的另一路由规则就写好了 ,等到后期我们可以在这里更改这个路由规则 让它能实现更高级的功能

略高级的路由功能

下面 我们修改一下上面的cats那个路由规则 仅当网址为 cats/1234 这样 id为纯数字字符组成的字符串 才能够激活这个路由规则 于是乎 我们修改代码为如下形式

懂正则表达式的童鞋们 ,应该不用我解释了 这里和上面唯一不同的地方就在这里

这一句的意思 就是 id的值仅能为 数字组成的字符串 长度不限至少为 1

下面我们来加一个 重定向 代码如下 同样不做解释

这个代码作用就是 当用户访问根目录时 把用户重定向到 /cats/下

然后再为 /cats添加一个路由 代码如下

View 的简单应用

 

 

[Ubuntu] 解决各种问题导致Apache PHP失常 完全卸载 并 重装

[Ubuntu] 解决各种问题导致Apache PHP失常 完全卸载 并 重装

系统版本 Ubuntu 14.04 LTS Desktop

 

今天晚上 ,,在学习Laravel的时候 我又去尝试 如何解决 PDOnot defined的问题 ,,结果 ,,就错误的安装了一个 名为 libapache2-mpm-prefork的模块,,然后我的apt-get
就不好用了 ,,报错是 dpkg configure 出问题 于是乎 ,,我就手动的remove了 /etc/apache2/目录下所有代 mpm_prefork的东西 ,也许这里的操作除了问题,,我随后无论如何 都没法启动apache 了 ,,  显示的错误是

 

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. ****  

于是乎就各种查找该如何解决这个问题,,百度 google stackOF都查了 没找到如何解决,, 只有Windows下如何解决的办法 于是乎 ,我直接卸载了apache想要重装 我用的是这个卸载指令

 

sudo apt-get remove apache2 然后 再次安装 ,发现卸载不完全,再次运行apache的时候 报错与上面一样 ,,于是 ,。。。我就卸载了 php5 用这个指令:

sudo apt-get remove php5*

结果,,再次安装的时候  当安装 libapache2-mod-php5时最后配置PHP5的时候出现这个问题

apache2_switch_mpm: MPM prefork not found

然后,,我猜测是 由于apache安装的不对 ,于是 这次卸载了全部的php 和apache

用的是如下指令:

sudo apt-get –purge remove php5 libapache2-mod-php5 php5-* apache apache*

然后 又rm -rf 了/etc/apache 和/etc/php5的所有文件 ,这次卸载干净了(其实中间折腾了好多次。。。2333333333)

卸载完毕之后,就是重装apache php5了  执行下面的指令:

这些指令执行完毕之后 ,你的PHP Apache就安装好了 ,但是 PHP还没有启动mysql模块 而且 Apache的目录也是默认目录 /var/www 给他换成自己的目录  并且配置好PHP 需要进行如下操作 :

修改Apache的 DocumentRoot 这个属性在/etc/apache2/sites-enabled 我们修改这个属性:

如上的文件 ,把DocumentRoot 换成你自己的 就可以了  DocumentRoot /home/void-admin/Documents/WebDev 就是这里

然后 继续配置 Apache 刚刚只是更改了 DocumentRoot 现在如果你访问localhost的话 会显示Permission Denied  403 下一步我们要给予它相应的权限 这个设置要在Apache的 conf里先设置 不然无论你怎么chmod 文件夹 都不能消除这个403错误

下面修改apahe2.conf  该文件在 /etc/apache2/apache2.conf

我们修改这一段:

给它的 路径改为 你的DocumentRoot所在的路径

这里我改为了:

然后 再次访问 localhost 就能看到你定义的DocumentRoot文件夹下的 目录结构了

下一步 配置PHP 支持mysql  这里需要 打开php的配置文件  对于我安装的PHP5来说 配置文件在这里 /etc/php5/apache2/php.ini 打开这个文件 在文件最后加上一行

然后 重启Apache  就可以啦~~~

 

不过 按照这种方法配好的PHP5不支持mcrypt 在命令行使用 现在要继续来配置下面的东西了TUT