自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

koastal的博客

学如逆水行舟,不进则退

  • 博客(194)
  • 资源 (6)
  • 收藏
  • 关注

原创 关于在线答题系统设计的一些想法

业务场景100道不定项选择题,不同考生的题目顺序不一样200位考生在规定时间同时开始和结束答题在考场后台的办公室中可以实时刷新分数的排行榜考试环境为学校的机房,网络环境为局域网考试题目为文学类知识竞赛,考生准考证号和身份证号分别作为用户名和密码#需求分析1、为了避免相互抄袭,不同考生的题目顺序需要不一样,这里需要打乱题目的顺序。2、考试开始作答的时间可能不同,但是都要在统一的时间截止答题,这就要求考生的机器需要统一时间,能够在考试结束后自动提交。3、在考试过程中要能够查看分数排行版,这里

2021-01-19 19:27:21 1044 1

原创 更好的php日志记录方式

改造前:makeLog("[file:".__FILE__.";line:".__LINE_."]".$msg);改造后:makeLog($msg);日志记录函数:function makeLog($msg){ $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,1); $file = $trace[...

2018-10-17 19:39:30 1223 2

原创 Laravel5.6使用CKEditor5的相关配置

Laravel 相关配置文件的上传与存储参考文档: https://laravel-china.org/docs/laravel/5.6/requests/1367#1d60f1 https://laravel-china.org/docs/laravel/5.6/filesystem/1390 https://docs.ckeditor.com/ckeditor4/latest...

2018-06-12 17:15:13 3788

原创 基于Node.js的AES加密

文本加密const crypto = require('crypto');function aesEncrypt(data,key,iv){ let cipher = crypto.createCipheriv('aes-128-cbc', key, iv); return cipher.update(data, 'utf8', 'hex')+cipher.final('hex'

2018-01-25 20:34:30 2371

原创 商品秒杀问题的解决方案

引言假设num是存储在数据库中的字段,保存了被秒杀产品的剩余数量。if($num > 0){ //用户抢购成功,记录用户信息 $num--;}假设在一个并发量较高的场景,数据库中num的值为1时,可能同时会有多个进程读取到num为1,程序判断符合条件,抢购成功,num减一。这样会导致商品超发的情况,本来只有10件可以抢购的商品,可能会有超过10个人抢到,此时num

2018-01-07 21:59:11 4881 3

原创 大文件分块上传

前端代码使用file.slice将文件进行分割,然后分别进行异步上传。html lang="zh-cn"> head> meta charset="utf-8"> meta http-equiv="X-UA-Compatible" content="IE=edge"> meta name="viewport" content="width=device-wid

2018-01-05 19:36:47 2314

原创 采用web3.js将数据写入到区块链中

let Web3 = require("web3");let fs = require("fs");let web3 = new Web3();web3.setProvider(new Web3.providers.HttpProvider("http://192.168.1.10:8545"));let log = { time:(new Date).getTime(), t

2017-12-13 17:22:13 7155 2

原创 加密上传ipfs

在基于js-ipfs-api实现ipfs的文件上传与下载中已经实现了内容和文件上传ipfs,然后下载到本地。ipfs具有分布式存储和不可篡改性等优点,但隐私性较差,一旦上传到ipfs之后,用户就可以从任一ipfs节点的网关获取数据

2017-12-13 12:25:55 4480 2

原创 基于js-ipfs-api实现ipfs的文件上传与下载

配置本地的ipfs节点ipfs官网:https://ipfs.io/ 下载地址:https://dist.ipfs.io/#go-ipfs# 初始化ipfs节点ipfs init# 运行ipfs节点ipfs daemon更多配置可参考: https://ipfs.io/docs/getting-started/ https://hacpai.com/article/15110150973

2017-12-11 13:52:19 13941 6

原创 php基于namespace的类自动加载

PhpStorm中设置命名空间Loader.php<?phpnamespace MVC;class Loader{ public static function autoload($namespace){ $path = trim(str_replace(__NAMESPACE__,"",$namespace),DIRECTORY_SEPARATOR).".php";

2017-12-10 21:04:50 925

原创 Solidity的CURD

相关工具Solidity:https://github.com/ethereum/solidity Web3.js:https://github.com/ethereum/web3.js Geth:https://github.com/ethereum/go-ethereum Mist:https://github.com/ethereum/mist Remix:https://remix.

2017-12-10 15:35:08 1825

原创 搭建以太坊私有链多节点环境

搭建节点00参照:http://blog.csdn.net/koastal/article/details/78737543搭建节点01实验环境中,00节点和01节点运行在同一台服务器,如果节点在不同的服务器,需要使用同样的gensis.json初始化区块,不同服务器的端口并不影响,都可以使用默认的8545和30303端口。初始化创世区块geth --datadir /home/blockChain

2017-12-08 10:51:32 10990 2

原创 Geth搭建以太坊私链环境

实验机器Ubuntu 16.04.3 LTS 1G内存 虚拟机环境搭建环境安装Geth https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntusudo apt-get install software-properties-commonsudo add-apt-repository -

2017-12-07 20:56:51 11830 1

原创 基于Vue的三级联动下拉框

展示html部分使用v-model设置和获取select的值使用v-for显示option列表使用:value设置option属性使用{{}}输出内容<div id="test"> 单位: <select v-model="UnitSelected"> <option v-for="item in UnitList" :value="item.id">{{i

2017-12-02 01:36:32 21343 1

原创 .NET MVC 通过权限控制文件的下载

禁止用户通过URL直接下载文件在web.config中配置通过后缀名拒绝访问<security> <requestFiltering> <fileExtensions> <add fileExtension=".zip" allowed="false" /> <add fileExtension=".ppt" allowed="false" /> <a

2017-11-28 23:57:21 1478

原创 .net MVC 解决session超时失效的问题

用于登录以后,将用户信息写入sessionpublic class HomeController:Controller{ public ActionResult Login(){ .... System.Web.HttpContext.Current.Session["id"] = RequestHandler.SafeInt(row["id"].ToStri

2017-11-19 16:30:20 9145 1

原创 获取Select标签修改之前的值

select标签在修改内容时,会触发change事件,在该事件中可以获取修改之后的值,而修改之前的值是获取不到的。目前有一个需求是,当用户修改select的内容时,弹出确认框询问用户是否确认修改,如果用户点击取消,则select标签的值重置为修改之前的值。解决思路,为select标签添加hook属性,用于保存select标签当前的值,当select触发change事件时,hook属性的值保存了修改之

2017-11-12 16:32:06 13237 5

原创 身份证号的验证与解析

最近参加一些招聘,很多时候时候身份证号都会作为表单的一部分,需要用户进行填写。有些表单在填写了身份证号之后,还需要用户手动填写籍贯、性别、出生年月等信息,其实这些信息都在身份证号里面包含了。身份证号的组成要验证和解析身份证号,首先应该知道身份证号的组成。 身份证号可以划分成4部分,分别对应地区、出生年月、序列号、校验位 省 市 区 年 月 日 序列号 校验位

2017-09-05 15:54:02 2507

原创 php多进程使用场景

安装pcntl扩展php多进程模块依赖pcntl扩展,官方手册介绍:http://php.net/manual/zh/book.pcntl.php Note: 1. 此扩展在 Windows 平台上不可用。 2. 进程控制不能被应用在Web服务器环境,当其被用于Web服务环境时可能会带来意外的结果。因此,不能再PHP Web开发中使用多进程。# 通过pecl安装pcntl扩展s

2017-09-04 12:39:16 5915

原创 RabbitMQ任务分发

RabbitMQ中文文档 http://rabbitmq.mr-ping.com/在RabbitMQ的文档中,对于任务分发是放在“工作队列”这一章节介绍的。在后面介绍扇形、直连、主题交换机时并没有提到,在学习的过程中容易误认为只有默认交换机才具有任务分发机制。RabbitMQ中消息的分发有3个过程 1. 生产者将消息发送到交换机 2. 交换机将消息分发到队列 3. 队列将消息分发给消费者 在步

2017-08-31 23:56:59 1133

原创 依赖注入和控制反转

当调用者需要被调用者的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例,但在这里,创建被调用者的工作不再由调用者来完成,而是将被调用者的创建移到调用者的外部,从而反转被调用者的创建,消除了调用者对被调用者创建的控制,因此称为控制反转。依赖注入则是实现控制反转的一种常用的手段。//code1class IndexController(){ private $Config;

2017-07-14 15:24:26 840

原创 重复数组中的二分查找

在何大神的博客看到一篇关于重复数据二分查找的题目。描述如下:给定一个升序排列的自然数数组,数组中包含重复数字,例如:[1,2,2,3,4,4,4,5,6,7,7]。问题:给定任意自然数,对数组进行二分查找,返回数组正确的位置,给出函数实现。注:连续相同的数字,返回第一个匹配位置还是最后一个匹配位置,由函数传入参数决定。 文章链接:http://hedengcheng.com/?p=595下面是自己

2017-07-13 10:05:21 3753

原创 Discuz数据库引擎转换

MyISAM与InnoDB的对比 https://www.biaodianfu.com/mysql-myisam-innodb.htmlMyISAM的读取性能要比InnoDB好一些,但这略微的优势远比不上InnoDB的行级锁和事务操作等特性。MySQL从5.6开始,将InnoDB作为默认的数据库引擎,因此除非需要使用MyISAM的特有功能,都应该使用InnoDB数据库引擎。Discuz论坛中的帖子

2017-07-09 01:18:23 1809

原创 mysql中的affected_rows

在操作mysql语句时,有时需要通过affected_rows来判断语句执行的情况。例如在事务操作中,就可以通过affected_rows来判断事务是否执行成功,以进一步执行事务的提交或者回滚操作。对于SELECT操作,mysql_affected_rows()等价于mysql_num_rows(),即查询结果的行数,但是显示使用mysql_num_rows()更加合适。因此mysql_affect

2017-07-08 00:41:54 75496 1

原创 Apache通过ip和user_agent限制访问

对应Nginx的限制访问,今天看了下Apache手册,总结了一下Apache的限制访问。限制IP访问与Nginx中的IP限制指令类似,Apache也是通过Allow和Deny指令限制访问,不同的是首字母大写且后面要加from。Nginx中的allow和deny指令的顺序是与iptable类似的,匹配到合适的规则就停止继续匹配,若都没有匹配到的话,则默认为allow。Apache与Nginx的指令顺序

2017-06-16 17:13:00 3093

原创 Nginx通过ip和user_gent限制访问

DDOS攻击是大规模访问站点经常会遇到的问题,它是指有人通过程序恶意刷站点的某些页面,导致站点响应缓慢或者直接拒绝服务。这种情况可以通过分析nginx的access日志发现,存在大量相同ip或者user_agent的请求,我们可以根据请求的相似性,对于这些访问的请求,直接在nginx层面上过滤掉。通过ip限制访问Nginx中访问控制模块相关文档http://nginx.org/en/docs/htt

2017-06-15 21:28:59 2108

原创 抽奖系统的设计

抽奖模块设计思路管理员在后台设置奖品的中奖概率,未中奖概率 = 1-中奖概率之和。伪随机数生成函数用于生成0-1之间的随机数,参考了官方手册中mt_getrandmax示例。 http://php.net/manual/zh/function.mt-getrandmax.php处理奖项数组,增加未中奖选项的概率获得伪随机数遍历奖项数据通过奖项的获奖概率,设置坐标的左右区间比较随机数是否

2017-05-27 15:17:31 3791

原创 chrome调试压缩后的代码

利用chrome的开发者工具对JavaScript代码打断点调试,是一种常用的前端调试方法。但有时我们需要对压缩后的JavaScript进行调试,因为现在前端大多采用FIS或webpack进行压缩,如果拿不到JavaScript的源代码,就只能对压缩后的代码进行断点分析。点击Sources 面板下方的 pretty print 按钮{},格式化JavaScript代码,然后再打断点调试即可。 参考

2017-05-24 16:46:07 7279 1

原创 SSH连接VMware中NAT模式主机

VMware端口转发本地主机:10.220.160.11VMware虚拟机:192.168.76.128将10.220.160.11:9876转发至192.168.76.128:22编辑 / 虚拟网络编辑器SSH连接登录#!/usr/bin/expectset timeout 30set user rootset passwd rootset ip 10.220.160.11set por

2017-05-22 10:09:46 1961

原创 Slim中使用Controller

官方示例Slim中给出的调用Controller的方法如下:$app->get('/home', '\HomeController:home');通过给出的示例可以看出,路由的第二个参数是具体Controller的命名空间和方法的结合。创建目录我们将所有的控制器对象都放在根目录下的controllers目录,具体的控制器类文件还可以根据功能进行多级目录划分。// \controllers\admin

2017-05-20 22:08:37 2825

原创 容器类的两种实现方式

通过魔术方法实现classclass MagicContainer{ private $ele; function __construct() { $this->ele = []; } function __set($name, $value) { $this->ele[$name] = $value; }

2017-05-19 13:56:07 927

原创 ssh私钥登录

ssh支持多种登录方式,比较常见的是通过用户名&密码和公私钥对两种方式。通过用户名和密码登录的方式比较简单spawn ssh -l root 192.168.1.11等待提示输入密码即可。生成公私钥对我们使用ssh-keygen生成公私钥对,ssh-kengen是安装git时默认安装的组件,在windows上可以通过gitbash使用。ssh-keygen -t rsassh-keygen -t

2017-05-17 19:42:02 27186 3

原创 jQuery操作dom的一个实例

一个是开发中遇到的例子<div class="b2r esb" id="e_adv_s3"><p><a href="javascript:;">超链接A</a><a href="javascript:;">超链接B</a></p><p><a href="javascript:;">超链接C</a><a href="javascript:;">超链接D</a></p><p><a h

2017-05-16 20:05:09 670

原创 获取文件后缀名的几种方式

PHP使用strrpos,分割字符串<?phpfunction suffix($name){ $index = strrpos($name,"."); return substr($name,$index,strlen($name)-$index);}echo suffix('koastal.png');使用pathinfo,获取后缀名<?phpfunction suffix

2017-05-16 19:53:15 2005

原创 Node.js发送HTTP请求

在Node.js中发送HTTP请求,用的比较多的是request组件,该组件的功能非常强大,但是该组件需要通过回调函数的方式获取操作的结果。由于现在Node.js对ES6已经支持的比较好了,我们更希望request的结果能够返回request对象,这样能够更加方便我们在获取结果之后的操作。我们可以使用ES6原生的Promise对象对request组件进行封装使用function request_p

2017-05-14 14:37:35 2670

原创 Promise对象的基本使用

promise对象用于将node.js中的异步函数串行执行,串行执行的情况可以分为以下两种情况:串联使用then方法,每次返回promise对象或其他参数。let startTime = Date.now();function fun1() { let err = null; let start = Date.now()-startTime; return new Prom

2017-05-12 17:34:06 2664

原创 异步方法的串行执行

异步函数获取返回值异步方法的串行执行eventeimter用于简单处理两个事件的串行执行,在事件A执行完成之后,执行函数B。const events = require('events');const fs = require('fs');const emitter = new events.EventEmitter();fs.readFile('../file1.txt','utf-8',fu

2017-05-08 12:54:54 915

原创 node.js中使用exports

node.js中可以使用module.exports和exports两种方式导出模块中的接口。两者的关系如下:exports = module.exports;exports是modle.export的引用,因此exports的属性修改会与module.exports同步,但是如果直接给exports赋值,则exports对module.exports的引用就会被重置,导出的接口就会失效。例如:ex

2017-05-07 23:00:13 1247

原创 CSDN的Markdown编辑器用法

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

2017-05-07 22:57:18 735

原创 优雅的URL(伪静态)

摘自Yii,说明文档apache# 设置文档根目录为 "basic/web"DocumentRoot "path/to/basic/web"<Directory "path/to/basic/web"> # 开启 mod_rewrite 用于美化 URL 功能的支持(译注:对应 pretty URL 选项) RewriteEngine on # 如果请求的是真实存在的文件或

2017-04-24 21:30:31 1104

基于PHP的sso实例

基于PHP的sso实例

2016-05-29

MVC构架V2.0

PHP编写的MVC构建,集成了smarty模板和medoo数据库框架

2016-05-19

简单的MVC构架

MVC,Smarty

2016-05-18

Smarty3中文手册

Smarty3中文手册,使用方法可参考:http://blog.csdn.net/koastal/article/details/51423125

2016-05-16

psftp上传下载工具

psftp.exe可以方便的在windows和linux之间传数据。 使用方法http://note.youdao.com/share/?id=67fffbb40a84394766d83680eb9ff7df&type=note

2016-01-11

OAuth2.0新浪微博简单示例

帮助新手学习OAuth的一个很好的示例 http://blog.csdn.net/koastal/article/details/50282509

2015-12-13

空空如也

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

TA关注的人

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