<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[koastal的博客]]></title><description><![CDATA[学如逆水行舟，不进则退]]></description><link>https://blog.youkuaiyun.com/koastal</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; koastal]]></copyright><item><title><![CDATA[关于在线答题系统设计的一些想法]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/112850316</link><guid>https://blog.youkuaiyun.com/koastal/article/details/112850316</guid><author>koastal</author><pubDate>Tue, 19 Jan 2021 19:27:21 +0800</pubDate><description><![CDATA[业务场景

100道不定项选择题，不同考生的题目顺序不一样
200位考生在规定时间同时开始和结束答题
在考场后台的办公室中可以实时刷新分数的排行榜
考试环境为学校的机房，网络环境为局域网
考试题目为文学类知识竞赛，考生准考证号和身份证号分别作为用户名和密码
#需求分析
1、为了避免相互抄袭，不同考生的题目顺序需要不一样，这里需要打乱题目的顺序。
2、考试开始作答的时间可能不同，但是都要在统一的时间截止答题，这就要求考生的机器需要统一时间，能够在考试结束后自动提交。
3、在考试过程中要能够查看分数排行版，这里]]></description><category></category></item><item><title><![CDATA[更好的php日志记录方式]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/83116404</link><guid>https://blog.youkuaiyun.com/koastal/article/details/83116404</guid><author>koastal</author><pubDate>Wed, 17 Oct 2018 19:39:30 +0800</pubDate><description><![CDATA[改造前：


makeLog(&quot;[file:&quot;.__FILE__.&quot;;line:&quot;.__LINE_.&quot;]&quot;.$msg);


改造后：


makeLog($msg);

日志记录函数：


function makeLog($msg){
    $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,1);
    $file = $trace[...]]></description><category></category></item><item><title><![CDATA[Laravel5.6使用CKEditor5的相关配置]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/80668260</link><guid>https://blog.youkuaiyun.com/koastal/article/details/80668260</guid><author>koastal</author><pubDate>Tue, 12 Jun 2018 17:15:13 +0800</pubDate><description><![CDATA[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...]]></description><category></category></item><item><title><![CDATA[基于Node.js的AES加密]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/79166351</link><guid>https://blog.youkuaiyun.com/koastal/article/details/79166351</guid><author>koastal</author><pubDate>Thu, 25 Jan 2018 20:34:30 +0800</pubDate><description><![CDATA[文本加密

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']]></description><category></category></item><item><title><![CDATA[商品秒杀问题的解决方案]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78995885</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78995885</guid><author>koastal</author><pubDate>Sun, 07 Jan 2018 21:59:11 +0800</pubDate><description><![CDATA[引言

假设num是存储在数据库中的字段，保存了被秒杀产品的剩余数量。



if($num > 0){
    //用户抢购成功，记录用户信息
    $num--;
}

假设在一个并发量较高的场景，数据库中num的值为1时，可能同时会有多个进程读取到num为1，程序判断符合条件，抢购成功，num减一。这样会导致商品超发的情况，本来只有10件可以抢购的商品，可能会有超过10个人抢到，此时num]]></description><category></category></item><item><title><![CDATA[大文件分块上传]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78984569</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78984569</guid><author>koastal</author><pubDate>Fri, 05 Jan 2018 19:36:47 +0800</pubDate><description><![CDATA[前端代码

使用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]]></description><category></category></item><item><title><![CDATA[采用web3.js将数据写入到区块链中]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78794275</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78794275</guid><author>koastal</author><pubDate>Wed, 13 Dec 2017 17:22:13 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[加密上传ipfs]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78789943</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78789943</guid><author>koastal</author><pubDate>Wed, 13 Dec 2017 12:25:55 +0800</pubDate><description><![CDATA[在基于js-ipfs-api实现ipfs的文件上传与下载中已经实现了内容和文件上传ipfs，然后下载到本地。ipfs具有分布式存储和不可篡改性等优点，但隐私性较差，一旦上传到ipfs之后，用户就可以从任一ipfs节点的网关获取数据]]></description><category></category></item><item><title><![CDATA[基于js-ipfs-api实现ipfs的文件上传与下载]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78771932</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78771932</guid><author>koastal</author><pubDate>Mon, 11 Dec 2017 13:52:19 +0800</pubDate><description><![CDATA[配置本地的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]]></description><category></category></item><item><title><![CDATA[php基于namespace的类自动加载]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78767484</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78767484</guid><author>koastal</author><pubDate>Sun, 10 Dec 2017 21:04:50 +0800</pubDate><description><![CDATA[PhpStorm中设置命名空间Loader.php<?php
namespace MVC;
class Loader{
    public static function autoload($namespace){
        $path = trim(str_replace(__NAMESPACE__,"",$namespace),DIRECTORY_SEPARATOR).".php";]]></description><category></category></item><item><title><![CDATA[Solidity的CURD]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78765101</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78765101</guid><author>koastal</author><pubDate>Sun, 10 Dec 2017 15:35:08 +0800</pubDate><description><![CDATA[相关工具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.]]></description><category></category></item><item><title><![CDATA[搭建以太坊私有链多节点环境]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78749211</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78749211</guid><author>koastal</author><pubDate>Fri, 08 Dec 2017 10:51:32 +0800</pubDate><description><![CDATA[搭建节点00参照：http://blog.youkuaiyun.com/koastal/article/details/78737543搭建节点01实验环境中，00节点和01节点运行在同一台服务器，如果节点在不同的服务器，需要使用同样的gensis.json初始化区块，不同服务器的端口并不影响，都可以使用默认的8545和30303端口。初始化创世区块geth --datadir /home/blockChain]]></description><category></category></item><item><title><![CDATA[Geth搭建以太坊私链环境]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78737543</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78737543</guid><author>koastal</author><pubDate>Thu, 07 Dec 2017 20:56:51 +0800</pubDate><description><![CDATA[实验机器Ubuntu 16.04.3 LTS 
1G内存 
虚拟机环境搭建环境安装Geth 
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntusudo apt-get install software-properties-common
sudo add-apt-repository -]]></description><category></category></item><item><title><![CDATA[基于Vue的三级联动下拉框]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78692445</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78692445</guid><author>koastal</author><pubDate>Sat, 02 Dec 2017 01:36:32 +0800</pubDate><description><![CDATA[展示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]]></description><category></category></item><item><title><![CDATA[.NET MVC 通过权限控制文件的下载]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78660677</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78660677</guid><author>koastal</author><pubDate>Tue, 28 Nov 2017 23:57:21 +0800</pubDate><description><![CDATA[禁止用户通过URL直接下载文件在web.config中配置通过后缀名拒绝访问<security>
  <requestFiltering>
    <fileExtensions>
      <add fileExtension=".zip" allowed="false" />
      <add fileExtension=".ppt" allowed="false" />
      <a]]></description><category></category></item><item><title><![CDATA[.net MVC 解决session超时失效的问题]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78575116</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78575116</guid><author>koastal</author><pubDate>Sun, 19 Nov 2017 16:30:20 +0800</pubDate><description><![CDATA[用于登录以后，将用户信息写入sessionpublic class HomeController:Controller{
    public ActionResult Login(){
        ....
        System.Web.HttpContext.Current.Session["id"] = RequestHandler.SafeInt(row["id"].ToStri]]></description><category></category></item><item><title><![CDATA[获取Select标签修改之前的值]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/78512670</link><guid>https://blog.youkuaiyun.com/koastal/article/details/78512670</guid><author>koastal</author><pubDate>Sun, 12 Nov 2017 16:32:06 +0800</pubDate><description><![CDATA[select标签在修改内容时，会触发change事件，在该事件中可以获取修改之后的值，而修改之前的值是获取不到的。目前有一个需求是，当用户修改select的内容时，弹出确认框询问用户是否确认修改，如果用户点击取消，则select标签的值重置为修改之前的值。解决思路，为select标签添加hook属性，用于保存select标签当前的值，当select触发change事件时，hook属性的值保存了修改之]]></description><category></category></item><item><title><![CDATA[身份证号的验证与解析]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/77852482</link><guid>https://blog.youkuaiyun.com/koastal/article/details/77852482</guid><author>koastal</author><pubDate>Tue, 05 Sep 2017 15:54:02 +0800</pubDate><description><![CDATA[最近参加一些招聘，很多时候时候身份证号都会作为表单的一部分，需要用户进行填写。有些表单在填写了身份证号之后，还需要用户手动填写籍贯、性别、出生年月等信息，其实这些信息都在身份证号里面包含了。身份证号的组成要验证和解析身份证号，首先应该知道身份证号的组成。 
身份证号可以划分成4部分，分别对应地区、出生年月、序列号、校验位
  省   市   区
  年      月   日
  序列号
  校验位]]></description><category></category></item><item><title><![CDATA[php多进程使用场景]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/77836230</link><guid>https://blog.youkuaiyun.com/koastal/article/details/77836230</guid><author>koastal</author><pubDate>Mon, 04 Sep 2017 12:39:16 +0800</pubDate><description><![CDATA[安装pcntl扩展php多进程模块依赖pcntl扩展，官方手册介绍：http://php.net/manual/zh/book.pcntl.php
  Note: 
  1.  此扩展在 Windows 平台上不可用。 
  2. 进程控制不能被应用在Web服务器环境，当其被用于Web服务环境时可能会带来意外的结果。因此，不能再PHP Web开发中使用多进程。
# 通过pecl安装pcntl扩展
s]]></description><category></category></item><item><title><![CDATA[RabbitMQ任务分发]]></title><link>https://blog.youkuaiyun.com/koastal/article/details/77750905</link><guid>https://blog.youkuaiyun.com/koastal/article/details/77750905</guid><author>koastal</author><pubDate>Thu, 31 Aug 2017 23:56:59 +0800</pubDate><description><![CDATA[RabbitMQ中文文档 http://rabbitmq.mr-ping.com/在RabbitMQ的文档中，对于任务分发是放在“工作队列”这一章节介绍的。在后面介绍扇形、直连、主题交换机时并没有提到，在学习的过程中容易误认为只有默认交换机才具有任务分发机制。RabbitMQ中消息的分发有3个过程 
1. 生产者将消息发送到交换机 
2. 交换机将消息分发到队列 
3. 队列将消息分发给消费者 在步]]></description><category></category></item></channel></rss>