自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一路洒满阳光!

敏捷的棕色狐狸跳过了懒惰的狗

  • 博客(38)
  • 收藏
  • 关注

原创 Yii 框架自动加载机制 - 为什么可以在代码中随时使用 Yii 类

在代码中随处可以使用 Yii 类,比如 Yii::log()、Yii::app()->end() ,而 Yii 类的引入使用到了 Yii 框架的自动引入机制。

2018-07-10 14:49:52 272

原创 PHP执行耗时优化

一、耗时纪录方式 (待补充)二、耗时优化方法1、合理使用 fastcgi_finish_request() 函数根据 PHP 手册的说明:此函数冲刷(flush)所有响应的数据给客户端并结束请求。 这使得客户端结束连接后,需要大量时间运行的任务能够继续运行。也就是说,执行该函数后,客户端就会收到本次请求的结果,但是服务端会继续执行本次请求剩余的逻辑。这时即使执行一些耗时操作,客户...

2018-07-02 14:42:58 4514

原创 PHP语法特性使用

本文主要记录一些 PHP 区别于 Java 语法上一些特性和使用1. 动态添加属性应用场景:需要实例化对象,并为大量属性进行赋值时private function _productBiz($arrParams = []) { $biz = new ProductBusiness(); foreach ($arrParams as $property => $v...

2018-06-15 14:16:55 252

原创 Yii 框架问题排查:无法打印日志,Yii::log() 方法无效

在开发过程中遇到非常奇怪的问题,Yii::log() 方法无效,即使发生异常时也没有任何日志输出。Yii 框架肯定不会有问题,根据经验一般问题都出现在目录权限或者框架配置上。先说结论,这次问题在于配置文件中 'preload' => array('log'), 一行被他人错误的注释掉了,解开注释后日志打印恢复正常。下面记录一下排查方法,顺便了解一下 Yii 框架日志记录原理: 首先...

2018-05-31 15:04:29 4184

原创 PHP 内存溢出错误解决,以及对 PHP 命令行和Web访问两种执行方式的理解

开发过程中,某个接口由于从数据库读取数据量过大,返回状态为 200,但无响应数据,PHP错误日志里有如下信息:PHP Fatal error: Allowed memory size of 134217728 bytes exhausted。很显然这是内存溢出(Out Of Memory)引发的错误,但是令我疑惑的是,Yii 框架的业务日志(application.log)里没有任何输出,页...

2018-05-30 22:01:46 3333

原创 PHP单引号和双引号编码的坑

双引号字符串:UTF-8 编码 单引号字符串:ASCII 编码gmp_init("12345", 10); // 会报错gmp_init('12345', 10); // 正常运行

2018-05-28 10:35:06 835

原创 Yii框架源码阅读:错误处理与日志打印

(本文基于Yii 1.1版本)通常,在WebServer中会指定默认访问的入口文件,如 index.php ,在入口文件中会引入框架文件、应用配置等,在最后通过 Yii::createWebApplication($config)->run(); 运行。静态方法 Yii::createWebApplication 返回一个 CWebApplication 类的对象,CWebApplica...

2018-05-08 21:10:19 1340

转载 欢迎使用Markdown编辑器写博客

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...

2018-05-08 19:49:25 129

原创 TabLayout改造计划

大多数的应用程序都采用了多Fragment+底部导航栏,Android提供了Fragment+ViewPager+TabLayout这套解决方案,但是TabLayout在使用中有两处局限:Tab无法溢出TabLayout无法设置中心按钮(一般中心按钮不用来切换Fragment,而是发帖、扫码等其他功能)第一处局限已有开源项目XTabLayout解决了这个问题,实现这种效果主要是把Cl

2017-12-23 11:43:38 419

原创 MySQL在实际场景应用中的问题和思路

1、分表分为横向分表和纵向分表,横向分表直观来说即画一条水平线将大表分成若干个子表,每个子表的字段是相同的;纵向分表偏向于按照业务逻辑分表,每个子表有不同的字段。举例来说,现有用户表:t_user,记录注册登录信息(字段有username,password等),记录个人信息(字段有realname,idcard等),记录用户订单信息(字段有order,status等)。首先进行纵向分表,按照业务逻辑

2017-12-14 02:02:36 1885

原创 全新Linux服务器安装Nginx&PHP&MariaDB环境

1、Nginx环境安装最简单的方式——通过yum安装:yum install nginx这种方式的缺点是,安装完成后Nginx相关的文件并不会统一放置在一个目录中,而是按照RPM默认安装路径分散放置。RPM默认安装路径如下: 路径 说明 /etc 一些设置文件放置的目录如/etc/crontab /usr/bin 一些可执行文件

2017-11-11 02:16:42 1419

原创 Android APP开发记录

1、需要使用ViewPager但是不想使用v4支持包时遇到的问题:通常兼容低版本设备的做法是:ViewPager(v4) + Fragment(v4) + FragmentActivity(v4) + FragmentPagerAdapter(v4)。 构造FragmentPagerAdapter时使用getSupportFragmentManager也可以刚好获取到v4包下的FragmentMa

2017-02-01 21:32:37 346

原创 PyCharm中开发Python Flask使用模板出现警告

在Flask Web开发-基于Python的Web应用开发实战中,导入或继承模板时,{% extends "base.html" %}、{% extends "bootstrap/base.html" %}、{% import "bootstrap/wtf.html" as wtf %}会显示黄色背景的警告。警告原因是解析不到模板的指向。虽然程序可以正常运行,消除警告的方法是手动为PyCharm指定

2017-01-16 09:48:36 3313 1

原创 按层次生成、遍历二叉树

对于二叉树一般是按深度生成和遍历,比如使用递归方法进行先序遍历、中序遍历、后序遍历。这次我们按层次生成和遍历二叉树。这种遍历方式关键在于需要使用一个队列保存“已处理该节点,但还没处理它的子节点”这样的节点。# Definition for singly-linked list.class BinTree(object): def __init__(self, x): sel

2016-08-08 08:50:46 4374 5

原创 Python学习笔记

1. str类型不能进行单字符操作,可以将str转为list,操作完成后将list转为strstr->list:>>> l = list('leetcode')>>> print(l)['l', 'e', 'e', 't', 'c', 'o', 'd', 'e']list->str:>>> s = ''.join(l)>>> print(s)leetcode>>> print(type(s

2016-07-28 14:09:19 275

原创 爬楼梯(leetcode-70)

需要爬一个n阶楼梯来到达楼梯顶部,每次可以爬1阶也可以爬2阶。求共有多少种爬法?递归:到达n的“前一步”走法可以是:从n-1处爬1阶楼梯,或者从n-2处爬2阶楼梯。那么递归表达式即写成return climbStairs(n - 1) + climbStairs(n - 2),递归结束条件为n=1或n=2。递归方法会导致超时,爬楼梯的爬法数目符合斐波那契数列。(为什么?可参考:爬楼梯与斐波那契数

2016-07-27 23:42:18 5602

原创 判断是否为丑数(Ugly Number)(leetcode-263)

“丑数”是正数,且质数因子只包含2、3、5。(Ugly numbers are positive numbers whose prime factors only include 2, 3, 5。)关键在于:丑数一定是有限个2、3、5的乘积,因为所有的正整数都能分解成1与一个或多个素数的乘积。如果一个数是丑数,那么反复除以2、3、5后,一定会是1;如果一个数不是丑数,那么反复除以2、3、5后,一定还

2016-07-26 15:16:37 4358

原创 Python初级简易爬虫

最近在进行Android网络框架开发时,需要服务端进行测试,于是学习一下Python+Flask,也顺便做一做Python的爬虫。Python版本:Python 3.5项目结构:CoreSpider:控制爬虫的整体逻辑,负责调用其他模块HtmlParser:使用BeautifulSoup解析HTML页面,通过对HTML标签及其属性的选择,获取所有目标的名称和链接Item:每一个目标是一个I

2016-07-25 19:54:57 475

原创 判断二叉树是否相等(leetcode-100)

递归依据:两棵树相同位置节点的子树也必须相等递归出口:两个节点全是None,相等;只有一个是None,不等;两个都不是None,但节点值不相等,不等。# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x#

2016-07-20 11:49:43 840

原创 翻转二叉树(leetcode-226)

递归得到叶子节点,从叶子节点开始依次到根节点进行翻转class Solution(object): @classmethod def invertTree(self, root): if root == None: return None else: root.left = Solution.inver

2016-07-20 00:05:15 386

原创 二叉树的最大深度(leetcode-104)

如果根节点为空,则深度为0,返回0,递归的出口如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度比较左右子树深度值,返回较大的那一个通过递归调用# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x#

2016-07-19 22:36:25 1933

原创 轻量级Android网络请求框架

轻量级Android网络请求框架构成:BepHttpUtils类构建HttpURLConnection对象、设置参数、发起HTTP请求,传入BaseHandler或其子类来处理HTTP响应。GET方法POST方法BaseHandler类onStart、onProcess、onFinish、onSuccess、onFailure五个抽象方法。框架在不同阶段回调相应的方法。请求成功后(20X)

2016-07-03 00:21:26 961

原创 杂学-Fragment

Fragment是嵌入到Activity中的,但是在Fragment中调用Activity中方法、获取上下文时,要使用getActivity方法,并进行强制类型转换。例如在Fragment中需要用到ContentResolver,就可以ContentResolver resolver = ((MainActivity) getActivity()).getContentResolver();不建议为

2016-06-19 01:26:33 380

原创 自定义控件-组合控件

自定义控件当原生控件不能满足需要时,需要进行自定义控件,自定义控件可分为三种方式:对现有控件进行拓展通过现有控件的组合实现新的控件完全自定义一个新的控件组合控件的使用方式1、新建控件类首先控件是一个Java类,如android.widget.TextView类、android.widget.LinearLayout类等,那么自定义控件时,也必须新建一个自定义控件的类。由于该自定义控件由多个现

2016-06-10 02:42:39 1525 1

原创 Java设计模式-单例模式

第一种(懒汉,线程不安全)public class Singleton { private static Singleton instance; //被类方法引用的变量必须为static private Singleton (){} public static Singleton getInstance() { //static修饰的类方法,不需实例化对象即可调

2016-03-04 23:45:13 279

原创 Java设计模式-命令模式(Head First 设计模式5)

一、命令模式定义来看看命令模式的定义: 命令模式:将请求封装成对象,以便使用不同的请求、日志、队列等来参数化其他对象。命令模式也支持撤销操作。每次讲一个模式时,从定义都不能体会其中的技巧,所以接着通过举例子来说明命令模式。二、命令模式的举例下面来看看多用遥控器是如何使用命令模式的。2.1需求假设某个公司需要设计一个多用功能的遥控器。基本的需求如下:该遥控器有可以控制风扇,白炽灯,热水器等等的多

2016-02-26 13:51:54 578

原创 Java中字段、域与成员变量关系

Java中Field译为”字段“,也译为”域“,Field和成员变量(Member Variable)是相同的。成员变量包括:类变量(也叫静态变量) 和实例变量。静态变量前面有static关键字修饰,在任何一个实例中都具有相同的值,静态变量对于本类的所有实例是共享的。实例变量没有static关键字修饰,在每一个new出来的新实例中都是独立赋值的。例如java.lang.Class类中getDecla

2016-02-14 12:43:24 2623 2

原创 Java设计模式-工厂模式(1)简单工厂模式

将实例化新对象的过程(即new语句)从原有代码中分离出来,单独封装在一个类中,并将实例化对象的结果作为返回值返回,这个用来处理创建对象细节的类称为“工厂(Factory)”,而创建的对象为工厂的产品(Product)。当需要创建对象时,通过工厂类进行,还可以通过构造函数传入一个参数,根据参数选择具体实例化哪个类。被创建的实例通常都具有共同的父类,它返回这个产品的父类对象,而这个父类对象已经在实例化时

2016-01-31 23:20:42 321

原创 Java设计模式-装饰者模式(Decorator Pattern)

利用装饰者模式可以在不修改任何底层代码的情况下,给对象赋予新的职责。在设计程序时,应注意多用组合少用继承,通过继承设计子类的行为,在编译时就静态决定了,而使用组合的做法扩展对象的行为,就可以在运行时动态扩展。设计原则:类应该对扩展开放,对修改关闭。利用装饰设计模式可以完全遵守看似矛盾的“开放-关闭”原则。 对于原始对象DarkRoast(深培咖啡),使用Mocha(摩卡)对象装饰它,使用Whip(

2016-01-27 00:16:46 388

原创 Java设计模式-策略模式(Strategy Pattern)

一、策略模式定义策略模式定义了一系列的算法,并分别封装起来,使它们可相互替换。此模式使得算法可独立于使用它的客户而变化。策略模式的好处是可以动态设定客户的行为。二、策略模式要解决的问题对于继承自同一个父类的许多具体子类,为了提高代码的复用性,首先必然要抽取所有子类都具有的方法,将其写入父类,通过继承的方式使用这些方法。对于某一个子类独有的方法,则在该子类中单独实现,不涉及代码的复用。而重点在于,如何

2016-01-26 00:30:21 404

原创 使用SAX解析文档 --《第一行代码Android》学习笔记

1. 工作流程SAX(Simple API for XML)使用回调模型与用户代码交互,这是一种基于事件的编程模型。基于事件的编程模型的特点在于用户代码不是主动去执行,也就是说,它从来不会去指使XML解析器去做这做那,它是被动的,在等待被调用,然后才会去执行程序。SAX由解析器和用户代码组成。在处理整个文档时,解析器负责逐个依次扫描文档元素,用户代码负责侦听事件并执行响应,当解析器遇到标签、文本等元

2015-11-19 01:11:55 848

原创 Android定制ListView的界面(使用继承自ArrayAdapter的自定义适配器)--《第一行代码Android》学习笔记

ListView控件用于实现程序中的内容在屏幕上滚动的效果,大部分日常使用的应用程序都会使用ListView控件。一、简单ListView的用法简单ListView,即实现只有多个文本内容的滚动显示(不含有图片)。效果如图…关键代码如下:ArrayAdapter<String> adapter = new ArrayAdapter<String>( MainActivity.this

2015-10-13 00:35:53 5165 1

原创 Eclipse搭建Android开发环境-Android SDK和ADT离线安装

1. 下载Android SDK -> 百度网盘链接 或者 Android官网下载(需要代理)2. 下载ADT(Android Development Tools)->Android官网离线安装包 这是需要安装在Eclipse中的插件,按照链接上“Troubleshooting ADT Installation”一栏中的步骤一步一步做就好。不过在第7步做完之后,记得将“Contact all upd

2015-08-22 20:06:10 721

原创 散列-分离链接法(数据结构与算法分析-C语言描述)

散列是一种以常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何排序信息的操作将不会得到有效的支持。      理想的散列表是一个具有固定大小的数组。把表的大小记作TableSize,通常的习惯是让表从0到TableSize - 1变化。每个关键字被映射到从0到TableSize - 1这个范围中的某个数,并且被放到适当的单元中。这个映射就叫做散列函数(hash function)。

2015-08-18 22:27:55 1139

原创 typedef关键字与结构体、结构体指针的定义

一使用typedef定义结构体二使用typedef定义结构体指针一、使用typedef定义结构体typedef用来定义新的数据类型,通常typedef与结构体的定义配合使用。使用typedef的目的使结构体的表达更加简练(所以说typedef语句并不是必须使用的)。定义一个名字为TreeNode的结构体类型(现在并没有定义结构体变量,并不占用内存空间):struct TreeNode{

2015-08-17 11:20:18 30957 24

原创 判断栈输出顺序正确与否(西电OJ题目)

问题描述给定一个栈,其中最多存储M个数据。将N个数据以1,2,3,...,N的顺序压栈,然后再随机弹栈。判断一下哪些是有可能的弹栈顺序,而哪些不是。例如M是5,N是7,我们可以得到1, 2, 3, 4, 5, 6, 7的弹栈顺序,而不能得到3, 2, 1, 7, 5, 6, 4这样的弹栈顺序。(M,N 输入说明输入包含了一种情况下的测试数据。在每种情况下,有三组输入数据:

2015-06-02 10:33:46 3509

原创 杨辉三角链队列解法

数据结构与算法,链队列

2015-05-30 01:45:40 1276

原创 杨辉三角的链队列解法(链队列操作头文件)

链队列操作头文件

2015-05-30 01:39:40 889

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除