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将原来的代码全部注释掉 然后添加如下的代码  这段代码的意思十分的简单 就不做解释了 这个理解了就可以继续往下看了