<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[defending的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/defending</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; defending]]></copyright><item><title><![CDATA[Go Context]]></title><link>https://blog.youkuaiyun.com/defending/article/details/96855704</link><guid>https://blog.youkuaiyun.com/defending/article/details/96855704</guid><author>defending</author><pubDate>Mon, 22 Jul 2019 14:20:23 +0800</pubDate><description><![CDATA[https://www.flysnow.org/2017/05/12/go-in-action-go-context.html

控制并发有两种经典的方式，一种是WaitGroup，另外一种就是Context，今天我就谈谈Context。

什么是WaitGroup

WaitGroup以前我们在并发的时候介绍过，它是一种控制并发的方式，它的这种方式是控制多个goroutine同时完成。


fu...]]></description><category></category></item><item><title><![CDATA[addTwoNumbers]]></title><link>https://blog.youkuaiyun.com/defending/article/details/90317278</link><guid>https://blog.youkuaiyun.com/defending/article/details/90317278</guid><author>defending</author><pubDate>Sat, 18 May 2019 16:48:28 +0800</pubDate><description><![CDATA[package main

import "fmt"


type ListNode struct {
   Val  int
   Next *ListNode
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
   l3 := &amp;ListNode{}
   figure := 0
   node1 := l1
...]]></description><category></category></item><item><title><![CDATA[Narcissistic.py]]></title><link>https://blog.youkuaiyun.com/defending/article/details/90317165</link><guid>https://blog.youkuaiyun.com/defending/article/details/90317165</guid><author>defending</author><pubDate>Sat, 18 May 2019 16:41:10 +0800</pubDate><description><![CDATA[def narcissistic(n):
    n_list = []
    if n == 1:
        n_list.append(0)
    min_num = "1"
    max_num = "9"
    bit = n
    while n-1:
        min_num += "0"
        max_num += "9"
        n -= ...]]></description><category></category></item><item><title><![CDATA[rotatestring.py]]></title><link>https://blog.youkuaiyun.com/defending/article/details/90317148</link><guid>https://blog.youkuaiyun.com/defending/article/details/90317148</guid><author>defending</author><pubDate>Sat, 18 May 2019 16:39:59 +0800</pubDate><description><![CDATA['''
样例 1:

输入:  str="abcdefg", offset = 3
输出:  str = "efgabcd"
样例解释:  注意是原地旋转，即str旋转后为"efgabcd"
样例 2:

输入: str="abcdefg", offset = 0
输出: str = "abcdefg"
样例解释: 注意是原地旋转，即str旋转后为"abcdefg"
样例 3:

输入: str...]]></description><category></category></item><item><title><![CDATA[single.py]]></title><link>https://blog.youkuaiyun.com/defending/article/details/90317135</link><guid>https://blog.youkuaiyun.com/defending/article/details/90317135</guid><author>defending</author><pubDate>Sat, 18 May 2019 16:39:13 +0800</pubDate><description><![CDATA['''
样例
样例 1:

输入：[1,1,2,2,3,4,4]
输出：3
解释：
仅3出现一次
样例 2:

输入：[0,0,1]
输出：1
解释：
仅1出现一次
'''


def singleNumber(A):
    d = {}
    for i in A:
        if d.get(i, -1) == -1:
            d[i] = 1
        el...]]></description><category></category></item><item><title><![CDATA[条码]]></title><link>https://blog.youkuaiyun.com/defending/article/details/90317064</link><guid>https://blog.youkuaiyun.com/defending/article/details/90317064</guid><author>defending</author><pubDate>Sat, 18 May 2019 16:33:45 +0800</pubDate><description><![CDATA[package main

import (
   "image"
   "image/color"
   "image/draw"
   "image/png"
   "os"
   "github.com/boombuler/barcode"
   "github.com/boombuler/barcode/code128"
   "golang.org/x/image/font"
   "...]]></description><category></category></item><item><title><![CDATA[sftp_download]]></title><link>https://blog.youkuaiyun.com/defending/article/details/90317037</link><guid>https://blog.youkuaiyun.com/defending/article/details/90317037</guid><author>defending</author><pubDate>Sat, 18 May 2019 16:32:45 +0800</pubDate><description><![CDATA[package main

import (
   "fmt"
   "github.com/pkg/sftp"
   "golang.org/x/crypto/ssh"
   "log"
   "net"
   "os"
   "path"
   "time"
)

func connect(user, password, host string, port int) (*sftp.Clien...]]></description><category></category></item><item><title><![CDATA[ubuntu+php+apache2+nginx]]></title><link>https://blog.youkuaiyun.com/defending/article/details/89458110</link><guid>https://blog.youkuaiyun.com/defending/article/details/89458110</guid><author>defending</author><pubDate>Mon, 22 Apr 2019 18:31:09 +0800</pubDate><description><![CDATA[//删除 php
sudo dpkg -l | grep php
sudo apt-get autoremove php7*
sudo find /etc -name "*php*" |xargs rm -rf
sudo apt purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`
//检查有没有清理干净
sudo dpkg -l |...]]></description><category></category></item><item><title><![CDATA[mod_evasive防止DDoS]]></title><link>https://blog.youkuaiyun.com/defending/article/details/86638459</link><guid>https://blog.youkuaiyun.com/defending/article/details/86638459</guid><author>defending</author><pubDate>Fri, 25 Jan 2019 10:41:07 +0800</pubDate><description><![CDATA[模块mod_evasive用于防止DDoS。我们可以安装：

 

Vim

 


			1
			
			
			apt install libapache2-mod-evasive
			
		 

如果您以我们的方式安装Apache，mod_evasive默认情况下将处于活动状态。如果您运行：

 

Vim

 


			1
			
			
			a2enmod evasive 
		...]]></description><category></category></item><item><title><![CDATA[Promise 对象]]></title><link>https://blog.youkuaiyun.com/defending/article/details/84869109</link><guid>https://blog.youkuaiyun.com/defending/article/details/84869109</guid><author>defending</author><pubDate>Fri, 07 Dec 2018 08:49:30 +0800</pubDate><description><![CDATA[http://es6.ruanyifeng.com/#docs/promise

 

Promise 是异步编程的一种解决方案，比传统的解决方案——回调函数和事件——更合理和更强大。

 



const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 异步操作成功 */){
    ...]]></description><category></category></item><item><title><![CDATA[SparkMD5  浏览器使用MD5]]></title><link>https://blog.youkuaiyun.com/defending/article/details/84868988</link><guid>https://blog.youkuaiyun.com/defending/article/details/84868988</guid><author>defending</author><pubDate>Fri, 07 Dec 2018 08:23:53 +0800</pubDate><description><![CDATA[https://github.com/satazor/js-spark-md5

 



document.getElementById('file').addEventListener('change', function () {
    var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.proto...]]></description><category></category></item><item><title><![CDATA[laravel-dompdf 添加页码]]></title><link>https://blog.youkuaiyun.com/defending/article/details/84848178</link><guid>https://blog.youkuaiyun.com/defending/article/details/84848178</guid><author>defending</author><pubDate>Thu, 06 Dec 2018 10:36:43 +0800</pubDate><description><![CDATA[Controller


$pdf = PDF::loadview('contractpdf');

$pdf-&amp;gt;setOptions(['isPhpEnabled'=&amp;gt; true]);

$pdf-&amp;gt;setPaper('L', 'landscape');

return $pdf-&amp;gt;setPaper('a4')-&amp;gt;stream();


 

blade.php

...]]></description><category></category></item><item><title><![CDATA[挂载主机目录]]></title><link>https://blog.youkuaiyun.com/defending/article/details/83505005</link><guid>https://blog.youkuaiyun.com/defending/article/details/83505005</guid><author>defending</author><pubDate>Mon, 29 Oct 2018 14:16:34 +0800</pubDate><description><![CDATA[//挂载主机目录

docker run -d -P  --name web  --mount type=bind,source=/home/www(主机目录),target=/app（image目录）  friendlyhello(image 名称)
 

//开终端进入容器内

docker exec -it web（运行中docker容器名称） /bin/bash
 

//看日志

doc...]]></description><category></category></item><item><title><![CDATA[docker (2)]]></title><link>https://blog.youkuaiyun.com/defending/article/details/83417202</link><guid>https://blog.youkuaiyun.com/defending/article/details/83417202</guid><author>defending</author><pubDate>Fri, 26 Oct 2018 16:39:52 +0800</pubDate><description><![CDATA[part3

一个docker-compose.yml文件是一个YAML文件，它定义了Docker容器在生产中应如何表现。


version: &quot;3&quot;
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
...]]></description><category></category></item><item><title><![CDATA[docker 入门]]></title><link>https://blog.youkuaiyun.com/defending/article/details/83413805</link><guid>https://blog.youkuaiyun.com/defending/article/details/83413805</guid><author>defending</author><pubDate>Fri, 26 Oct 2018 14:06:31 +0800</pubDate><description><![CDATA[ 

文档地址：https://docs.docker.com/get-started/#conclusion-of-part-one

1.运行docker --version并确保您拥有受支持的Docker版本

2.运行docker info查看有关docker安装的更多详细信息

3.docker image ls 查看所有镜像

4.docker container ls 查看正在运行的...]]></description><category></category></item><item><title><![CDATA[pdf2image]]></title><link>https://blog.youkuaiyun.com/defending/article/details/82978504</link><guid>https://blog.youkuaiyun.com/defending/article/details/82978504</guid><author>defending</author><pubDate>Tue, 09 Oct 2018 10:28:48 +0800</pubDate><description><![CDATA[
https://github.com/Belval/pdf2image


 

 

 



from pdf2image import convert_from_path, convert_from_bytes
import os, time, sys

def pdf2jpg():
    try:
        image = convert_from_path(sys.argv[1...]]></description><category></category></item><item><title><![CDATA[jquery 使用JSON.stringify转 json]]></title><link>https://blog.youkuaiyun.com/defending/article/details/81532747</link><guid>https://blog.youkuaiyun.com/defending/article/details/81532747</guid><author>defending</author><pubDate>Thu, 09 Aug 2018 10:57:02 +0800</pubDate><description><![CDATA[ 

var data = new Array()

data[&quot;id&quot;] = $(this).val()

这样的写法是new了一个数组对象，然后给数组对象设置属性，但是数组序列化的时候只会序列化数组中的元素，会忽略对象上的属性和值。

正确写法：

var data = {}

data[&quot;id&quot;] = $(this).val()...]]></description><category></category></item><item><title><![CDATA[log包的应用]]></title><link>https://blog.youkuaiyun.com/defending/article/details/81015826</link><guid>https://blog.youkuaiyun.com/defending/article/details/81015826</guid><author>defending</author><pubDate>Thu, 12 Jul 2018 14:55:39 +0800</pubDate><description><![CDATA[package loggerimport (	&quot;log&quot;	&quot;os&quot;	&quot;time&quot;	&quot;io&quot;	&quot;fmt&quot;	&quot;cary-lib/api-service/config&quot;	&quot;github.com/gin-gonic/gin&quot;)type LogFile struct {    level    map[string]string    fileName string    dat]]></description><category></category></item><item><title><![CDATA[读execl 输出 json]]></title><link>https://blog.youkuaiyun.com/defending/article/details/81015780</link><guid>https://blog.youkuaiyun.com/defending/article/details/81015780</guid><author>defending</author><pubDate>Thu, 12 Jul 2018 14:53:39 +0800</pubDate><description><![CDATA[package mainimport (   &quot;github.com/Luxurioust/excelize&quot;   &quot;fmt&quot;   &quot;os&quot;  &quot;github.com/gin-gonic/gin/json&quot;)func main(){   var aa =[]map[string]string{}   xlsx, err:= excelize.OpenFile(&quot;C:\\GO_WorkSpace\\...]]></description><category></category></item><item><title><![CDATA[Go 错误处理 实现Try]]></title><link>https://blog.youkuaiyun.com/defending/article/details/81015738</link><guid>https://blog.youkuaiyun.com/defending/article/details/81015738</guid><author>defending</author><pubDate>Thu, 12 Jul 2018 14:52:13 +0800</pubDate><description><![CDATA[func HttpGet(url string){   resp, err:= http.Get(url)   if err!= nil{      fmt.Println(err)   }   defer resp.Body.Close()   body, err:= ioutil.ReadAll(resp.Body)   if err!= nil{      fmt.Println(err) ...]]></description><category></category></item></channel></rss>