论某教育机构考试系统设计
前言近期在做一套答题系统,参考了某教育机构的设计。本章跟大家聊聊考试系统中的核心 - 如何考试?
简单点说,所谓考试系统就是答题系统,通过答题完成进行判分后返回其答题结果即完成整个流程。
当然过程中有些数据需要存储,有些则可在后期查询计算(个人理解),如有误导请速喷
如上图所示,一套试卷有N道试题,每道试题又是由题干与选项、答案组成,这样才汇聚了完整的一套答题(考试)系统。
试卷一次考试(问卷)则使用一套试卷,考试(问卷)与考试则为一对一的关系,而试卷与考试(问卷)则是多对多的关系
1234567CREATE TABLE `company_paper` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '试卷名称', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, ...
Supervisor 从入门到放弃
前言
Supervisor是一个客户端/服务器系统,允许其用户在类UNIX操作系统上控制许多进程。(官方解释)
简单点来讲,就是一个监控脚本运行的工具,不过他可以统一化管理,laravel的队列文档上也有相关使用方式方法,例如
定时脚本的启动、重启、关闭和日志监控
swoole的启动、重启、关闭和日志监控 (众所周知,swoole大部分的特性都只能在cli中运行)
redis的启动、重启、关闭和日志监控 (redis自身未提供类似phpmyadmin的后台可视化工具)
laravel中的队列、一些自动化的脚本、workman等等的脚本
一般都使用 &test.sh 让其来保证在后台运行,但在很多情况下,无法对脚本个人化的监控。这时你可能就需要 Supervisor 来帮助你。你大可把它当作你的unix系统的可视化管理后台。下面来让我们见证它的强大之处。
安装Supervisor 有多种安装方式,我推荐其中最简单也是最容易安装的一种
12apt-get -y install python-setuptoolseasy_install supervisor
正如你所 ...
RabbitMQ 初体验
概述
RabbitMQ是一款消息队列中间件。他提供了几乎覆盖所有语言的SDK与文档,简直强大的不的了。要详细的去了解学习RabbitMQ,我建议还是看官方文档吧。http://www.rabbitmq.com/getstarted.html
消息队列有以下几个基本用途
异步处理
应用解耦
流量削峰
系统架构
消息队列的这几个用途我会在后续的文章以真实案例去表述
生产者创建RabbitMQ链接12$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel ();
与链接一个数据库概念差不多
创建一个队列声明1$channel->queue_declare ('hello');
创建多个队列与创建多个数据库一样,hello则是队列名
创建一条消息到队列1$message = new AMQPMessage('Hello ...
XDEBUG 从入门到精通
前言Xdebug是PHP的扩展,用于协助调试和开发。
它包含一个用于IDE的调试器
它升级了PHP的var_dump()函数
它为通知,警告,错误和异常添加了堆栈跟踪
它具有记录每个函数调用和磁盘变量赋值的功能
它包含一个分析器
它提供了与PHPUnit一起使用的代码覆盖功能。
猿生必备的工具。但不推荐在生产环境中使用xdebug,因为他太重了。
安装PECL 安装12pecl install xdebugzend_extension="/usr/local/php/modules/xdebug.so"
源码包安装https://xdebug.org/download.php 寻找对应的包
1234wget xxx.gz./configuremake && make installzend_extension="/usr/local/php/modules/xdebug.so"
Docker安装以下为php dockerfile内部分内容
12RUN pecl install xdebugRUN echo ' ...
“生于忧患,死于安乐”之程序员人生
前言这本是《孟子》的一首诗词,拿来用有些惭愧。
废话不多讲,本章我们聊聊
“生于忧患,死于安乐”
忧患
上天要把重任降临在某人的身上,一定先要使他心意苦恼,筋骨劳累,使他忍饥挨饿,身体空虚乏力,使他的每一行动都不如意,这样来激励他的心志,使他性情坚忍,增加他所不具备的能力。
程序员是如何成为程序员的大伙有考虑过吗?我自认为是这样的
小学 -> 初中 -> 网吧 -> 高中 -> 网吧 -> 大学 -> 实习 -> 初级 -> 中级 -> 高级 -> 架构师
没错,大多人的经历都是如此!这样艰苦的奋斗,不断的努力,使我们在这个行业立足。正是这份兴趣、这份毅力、这份坚持支撑着我们,才让我们走到了现在。
现在,当我们工作了很长一段时间后,加班熬夜、受人欺负的日子都随之而去,可能你在想,总算是熬出头了。算是在某某城市扎根了。
但其实困难才刚开始,当年的热血消逝的已不剩多少,醒醒各位工程师。
安乐新进入一家公司,从小员工做起,当做到总监的职位时,是否该休息一下了?“不能”
如果在一家公司,拿着高薪,顶着乌纱帽,每天悠哉悠哉的 ...
不要被集成环境束缚住你前进的脚步
前言PHP之所以被称为入门快的一门开发语言,其中一个原因是因为他有很完善的集成开发环境,无论是在Windows还是Mac os 上都可一键安装,开启PHP学习之路。我依旧记得当年入门时,仅仅的几分钟则开启了
1echo "Hello World"
的不归路,但这也是快捷中存在的“弊端”。之所以说其存在“弊端”,是因为“集成“两字造成的,因“集成”而“集成”,会将初学者的思路封装到其中,如果这时候需要学习swoole或者安装一个rtmp的扩展。则瞬间懵逼(至少我当年是懵逼的)。
我之前写过一篇源码安装Nginx的文章,被人称为“多此一举”,我依旧认为作为一名程序员,了解其本质是必修功课。
本篇文章则讲解下如何在集成环境内安装你需要的扩展。
思路集成环境也是将Mysql,PHP,Nginx || Apache封装,写一个脚本将其启动、停止等操作统一化,如果需要安装扩展,这时候你需要先做几件事情。
寻找集成环境内的PHP安装目录
判断操作环境是linux还是windows
去下载你需要安装的扩展,如果是windows就很简单了,一般都是编译好的dll
安装好扩展重启你的 ...
优化你的PHP代码,从现在做起
前言
我一生的文章都会放在这里,我的博客,我希望每一行代码,每一段文字都能帮助你。https://github.com/CrazyCodes/Blog
大家好,我是CrazyCodes ,今天我们不聊工具、规范等等等等的辅助,就聊一下该如何写一段“好”的代码,本文以我的职业生涯碰到的代码为例,如有出入请在评论区提出异议,谢谢。
搜索功能搜索很常见,复杂的搜索大多出行在后台,举个栗子,大概需求是这样的
这是一个后台用户列表的搜索功能
搜索条件
可否并行
是否必填
用户名
可以
否
手机号码
可以
否
是否已认证
可以
是
用户性别
可以
否
最近登录时间
可以
否
账户余额
可以
否
初学者代码看到这些例子你是否不由的一颤,又要开始造轮子的是不是?以原生的例子为例,开始你可能会这样写(以下为伪代码)
123456789101112131415161718192021222324252627282930313233343536373839404142434445if (IS_POST) { $like = ''; ...
日常划水/短信验证码开发实例
前言
我一生的文章都会放在这里,我的博客,我希望每一行代码,每一段文字都能帮助你。https://github.com/CrazyCodes/Blog
大家好,我是CrazyCodes,在日常开发中有没有遇到过发送短信验证码的接口需要开发?你是如何处理短信验证码发送的呢?本篇我分享下短信验证码发送的设计。
初学者以聚合数据为例,初学者会酱紫做
百度
找到一串既熟悉又陌生的代码 (咋整也记不住的代码)
12345678910111213141516171819202122//初始化$curl = curl_init();//设置抓取的urlcurl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');//设置头文件的信息作为数据流输出curl_setopt($curl, CURLOPT_HEADER, 1);//设置获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设置post方式提交curl_setopt($curl, ...
基于业务设计数据表的总结
前言这是一篇日常开发中根据产品需求去设计数据表的总结。
抛去测试、架构来说,数据表设计是指定功能开发的一个起点,如果出现失误将会对未来开发以及运行都会有很大的影响。接下来我们聊聊应该如何根据需求去设计数据表。
原型图首先产品递交的绝笔是份原型图或者需求文档,这里先看原型图,根据原型图上的任意label、input汇总,再根据逻辑不同去划分为不同的块(也就意味着不同的表)。以电商优惠卷为例,原型图可能是这样的(原谅我不会画这图,就拿京东的一张图代替吧)。
当你看到这张原型后,首先你得确认这是个什么功能是吧。瞅了一眼是优惠券的功能,首先确立有了第一张表和表名
coupons再者优惠券是给予用户使用的,所以又有了
user_coupons
一个是优惠券存库表,一个是发送优惠券的用户表,至此表名想好了。接下来就是字段了。
分离根据上述原型图我们可以将字段所属逻辑区域分成以下这样
将以原型图为基准的逻辑分为两大块,一块是显示相关的字段,另一块则是控制相关的字段(如添加时间,过期时间,状态等)。
任意一家公司都想要有相关行业经验的开发者,并不是因为技术有多高深,而是可以根据给出的具有局限性 ...
我与Jetbrains的这些年
前言本章主要说一下如何去使用Jetbrains的各类工具,并且在上周参加了Jetbrains开发者日的大会,把参会的感受和体验在这里分享给各位。话不多说,我们进入正题。
使用想必各位一定使用过Jetbrains的任意一款产品,就算没用过也应该听说过吧。Jetbrains从开始至今总共分为三大模块
Developer Ide (集成开发工具)
Language (Jetbrains的开发语言 Kotlin)
DevOps (任务管理,持续集成,持续部署的一些东西)
对于Developer Ide我推荐使用Jetbrains ToolBox,它是管理所有Jetbrains Ide的工具。
Jetbrains平均一个月做一次小更新,安装了Jetbrains ToolBox就不必再去关心更新的事情了。并且Jetbrains ToolBox 还提供了项目列表的功能,如果这时候你需要打开一个项目,你无需去关心项目是哪种开发语言做的,只需要打开它并选择你需要开启的项目即可。
这里要注意,使用Alfred的同学,Jetbrains ToolBox将Ide安装的目录不在是/Applic ...