0%

评价一个算法的优劣,时间复杂度应该是最重要的指标,时间复杂度不止可以判断两个算法计算起来用时更短,甚至可以区分这个算法是否是计算机可以解决的。但是如何估计一个算法的时间复杂度有时也不是那么显而易见的,例如递归算法的时间复杂度,其中涉及到系统的压栈和弹栈时间,需要用到本文介绍主项公式来辅助求解。

阅读全文 »

在学习数据结构和算法的过程中,我们常常会遇到这样的问题:看到或想出某个时间复杂度或空间复杂度较低的算法,想要验证这个算法是否正确,但一时无法在OJ系统中找到相同的题目,只是有限的几个样本数据很难确定算法是否真的能AC,这时我们就可以借助对数器这一强有力的工具来帮助我们解决。

阅读全文 »

大二下学期社团大佬找到我们,说长春青年影展(CYFF)想和吉大合作将南校区作为影展的放映场地之一,我们来组织这次的放映,这也是继FIRST之后又一电影节与社团的合作活动。不同的是CYFF是长春本土的影展,于我们而言感到更加亲切,后来几次和策展人的接触中也留下了很好的印象。因此在次年的影展筹备活动中,策展人找到我希望我能负责第四届CYFF的设计工作,我也很开心的接受了。
说实话,第一次在这样的活动中承担设计工作心里是有点虚的,毕竟自己也只是个业余水平,不知道能否拿下这项任务,于是为了能拿出好的作品费了不少心思。设计风格也尝试了很多种,有了FIRST的经验想法也慢慢成熟,风格上还是以简约的风格为主,配以富有意义的图案,在发给策展人审核的时候也得到了认可,虽然最后在印制时没有采用所有的方案,我也还是很开心。

阅读全文 »

所谓预定义超全局变量,指的是全部作用域中始终可用的内置变量,函数中无需通过global关键字访问。PHP提供了9中超全局变量,有助于方便快捷的写代码

阅读全文 »

玩过3D游戏的朋友可能对换装系统非常熟悉,游戏人物通过在商城购买或与玩家交易获得的装备可以用来改变游戏人物的外观或者提升游戏角色的属性,但你是否想过这样一套换装系统是如何实现的呢;再举一个暴露年龄的例子,很久以前PC端软件盛行的时代,年轻人大多热衷于美化自己的QQ秀,给自己聊天界面的人物形象购买一套好看的服饰。上述两个案例都涉及到了我们今天要说的装饰者模式这一设计思想,装饰者模式能够做到动态的给某一个实体增加功能或职责,但又不破坏该类的完整性,换句话说就是内部组装功能,最后返回类并调用功能。

阅读全文 »

时间很快又到了纳新季,回想起第一次纳新的惨痛经历,因为是新申请的社团,给我们安排场地的时候临时加在了纳新区的最角落,旁边还是一个敲锣打鼓的音乐社团,他们一开始表演,我们这边吵的话都听不清……于是这一次大佬为了一雪前耻,多招些新同学,给我们争取到了一个很有牌面的场地,人家的场地一个帐篷宽,我们的场地两个帐篷宽,属实有牌面。于是我作为纳新素材的设计人员更觉得要在设计海报上面多花心思,争取壮大社团。
下图中这张泛黄的海报是第一次纳新的时候做的,现在看来这个艺术字真的有点突兀,如果换成平面的字体或许还会看起来协调一些,另一个问题还是之前提到的只会一味的居中再居中,这种单调的对齐方式用多了就会失去美感。有了后来的设计经验,这次纳新的作品就成熟了很多,并且为了突出新意,和其他社团采用宣传单或宣传海报的方式有所区分,我决定采用名片来做宣传,并且为每一个加入社团的会员设计可以折叠的会员卡,记录每次会员的观影记录,在学期末为支持我们社团观影活动的会员准备礼物,这个想法得到了大家的认可,我就着手开始准备了。

阅读全文 »

前面我们谈了很多面向对象编程风格相对于面向过程编程风格的好处,诸如可维护性,可复用性,可扩展性和灵活性,虽然我们已经知道封装、继承、多态这些特性,可以支持我们来完成面向对象程序的开发,但在实际开发过程中,我们怎样才能做到面向对象开发呢。这里就需要引入著名的“SOLID”设计原则,单一功能、开闭原则、里氏替换、接口隔离以及依赖反转是由罗伯特·C·马丁在21世纪早期引入的设计原则,当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能,SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的重要组成部分。

阅读全文 »

前面我们提到过,数据库编程中的SQL指令分为四种,最后一种dtl数据事务语句还没有讲到。熟悉数据库的朋友应该知道,数据库是一个并行系统,在系统运行的过程中,不可能同一时刻只有一个用户在访问某个数据,当不同用户对同一个数据进行访问时,系统必须保证数据的同步,这就涉及到事务。
事务用于保证数据的一致性,由一组相关的dml语句组成,该组语句要么全部成功要么全部失败。事务具有acid四大特性:原子性、一致性、隔离性、持久性。在mysqli扩展库中提供了相应的函数支持,用来处理事务。同时,该扩展库还支持预编译技术,用于对多条SQL语句进行批处理。

阅读全文 »

日常设计过程中我们常常会遇到这样的需求,在得到一个数据结果的过程中,有时会选择这样或那样不同的处理过程,也就是说目的相同,算法却不同,并且这些算法之间还要频繁的替换,如果是在小型的程序中,还可以使用方法重载的技术实现这种需求,但是面对大型系统,这样基于函数级别的封装就显得不便于维护,每次增加新的算法就要使得原来已有的算法重新编译一边,代价较高,因此策略模型的引入就显得非常重要。

阅读全文 »

在新版的PHP7中,PHP越来越向面向对象风格靠拢,原有的mysql已经不再支持,因此PHP更加推荐用户使用mysqli扩展库,相比mysql扩展库,mysqli扩展库具有以下优势:

  • 稳定性,安全性,效率有所提升
  • 支持面向对象编程风格,同时也向后兼容,支持面向过程编程风格(具备两套函数库)
阅读全文 »