Go语言教程之边写边学:数据结构与算法:LIFO堆栈和FIFO队列

堆栈是一个有序列表,其中所有插入和删除都在一端(称为顶部)进行。队列是一个有序列表,其中所有插入都发生在一端(后部),而所有删除都发生在另一端(前部)。堆栈有时称为后进先出 (LIFO) 列表,队列称为先进先出 (FIFO) 列表。

package main
 
import (
    "fmt"
)
 
type Node struct {
    Value int
}
 
func (n *Node) String() string {
    return fmt.Sprint(n.Value)
}
 
// 创建stack
func NewStack() *Stack {
    return &Stack{}
}
 
// Stack结构type Stack struct {
    nodes []*Node
    count int
}
 
// 压入stack
func (s *Stack) Push(n *Node) {
    s.nodes = append(s.nodes[:s.count], n)
    s.count++
}
 
// 弹出stack
func (s *Stack) Pop() *Node {
    if s.count == 0 {
        return nil
    }
    s.count--
    return s.nodes[s.count]
}
 
// 创建queue
func NewQueue(size int) *Queue {
    return &Queue{
        nodes: make([]*Node, size),
        size:  size,
    }
}
 
// Queue结构type Queue struct {
    nodes []*Node
    size  int
    head  int
    tail  int
    count int
}
 
// queue的压入func (q *Queue) Push(n *Node) {
    if q.head == q.tail && q.count > 0 {
        nodes := make([]*Node, len(q.nodes)+q.size)
        copy(nodes, q.nodes[q.head:])
        copy(nodes[len(q.nodes)-q.head:], q.nodes[:q.head])
        q.head = 0
        q.tail = len(q.nodes)
        q.nodes = nodes
    }
    q.nodes[q.tail] = n
    q.tail = (q.tail + 1) % len(q.nodes)
    q.count++
}
 
// queue的弹出func (q *Queue) Pop() *Node {
    if q.count == 0 {
        return nil
    }
    node := q.nodes[q.head]
    q.head = (q.head + 1) % len(q.nodes)
    q.count--
    return node
}
 
func main() {
    s := NewStack()
    s.Push(&Node{3})
    s.Push(&Node{5})
    s.Push(&Node{7})
    s.Push(&Node{9})
    fmt.Println(s.Pop(), s.Pop(), s.Pop(), s.Pop())
 
    q := NewQueue(1)
    q.Push(&Node{2})
    q.Push(&Node{4})
    q.Push(&Node{6})
    q.Push(&Node{8})
    fmt.Println(q.Pop(), q.Pop(), q.Pop(), q.Pop())
}
git:fatal: Not possible to fast-forward, aborting.

执行git pull origin xxx(分支) --rebase之后先push上远程分支。

Go语言教程之边写边学:For循环

在本教程中,您将学习如何使用 Golang 中的循环重复代码块执行。

for循环用于迭代序列(即切片、数组、映射或字符串)。

作为与C家族相关的语言,Golang也支持循环式控制结构。

Golang没有while循环,因为当与单个条件一起使用时,for 循环具有相同的目的。

 

传统for循环

当您事先知道脚本应运行多少次时,将使用for循环。

考虑以下示例,以三种不同的方式显示从1到10的数字。

package main
 
import "fmt"
 
func main() {
 
	k := 1
	for ; k <= 10; k++ {
		fmt.Println(k)
	}
 
	k = 1
	for k <= 10 {
		fmt.Println(k)
		k++
	}
 
	for k := 1; ; k++ {
		fmt.Println(k)
		if k == 10 {
			break
		}
	}
}

 

用于范围声明

for语句支持一种附加形式,该形式使用关键字 range 循环访问计算结果为数组、切片、映射、字符串或通道的表达式

package main
 
import "fmt"
 
func main() {
 
	// Example 1
	strDict := map[string]string{"Japan": "Tokyo", "China": "Beijing", "Canada": "Ottawa"}
	for index, element := range strDict {
		fmt.Println("Index :", index, " Element :", element)
	}
 
	// Example 2
	for key := range strDict {
		fmt.Println(key)
	}
 
	// Example 3
	for _, value := range strDict {
		fmt.Println(value)
	}
}

 

字符串上的范围循环

for循环遍历字符串的每个字符。

考虑以下示例,显示“Hello”五次。

package main
 
import "fmt"
 
func main() {
	for range "Hello" {
		fmt.Println("Hello")
	}
}

 

无限循环

for循环运行无限次,除非我们无法中断。

考虑以下示例,多次显示“Hello”。

package main
 
import "fmt"
 
func main() {
	i := 5
	for {
		fmt.Println("Hello")
		if i == 10 {
			break
		}
		i++
	}
}
Fafo搜索引擎使用技巧

注意:FOFA搜索关键词不区分大小写

 

1、搜索页面标题中含有“后台管理”关键词的网站和IP

title="后台管理"

 

2、搜索HTTP响应头中含有“thinkphp”关键词的网站和IP

header="thinkphp"

技术图片

3、搜索html正文中含有“管理后台”关键词的网站和IP

body="管理后台"

 

4、搜索公网上的BurpSuite代理

body="Welcome to Burp Suite"

 

5、搜索根域名中带有“zhe.ink”的网站

domain="zhe.ink"

 

6、搜索域名中带有"login"关键词的网站

host="login"

 

7、搜索开放3388端口并且位于中国的IP

port="3388" && country=CN

 

8、搜索指定IP或IP段

ip="120.27.6.1/24"
ip="120.97.56.1"

 

9、搜索证书(如https证书、imaps证书等)中含有"phpinfo.me"关键词的网站和IP

cert="phpinfo.me"

 

10、搜索同时开启3306端口、443端口和22端口的IP

ports="3306,443,22"

 

11、搜索只开启3306端口、443端口和22端口的IP

ports=="3306,443,22"

 

12、逻辑运算符

&& -- 表示逻辑与

|| -- 表示逻辑或

如:搜索HTTP响应头中含有"x-pingback"关键词或"thinkphp"关键词的网站和IP

header="x-pingback" || header="thinkphp"

 

php imagck读取pdf错误:attempt to perform an operation not allowed by the security policy PDF

这是ImageMagic中有权限配置文件,需要修改PDF相关的读写权限。

# 打开policy.xml文件

sudo nano /etc/ImageMagick-6/policy.xml

# 修改PDF相关权限,由none改为read|write

<policy domain="coder" rights="none" pattern="PDF" />

# 改为

<policy domain="coder" rights="read|write" pattern="PDF" />

 

2023年使用人数最多的PHP MVC框架以及如何选择合适的框架

2023年使用人数最多的PHP MVC框架是Laravel。根据Stack Overflow的最新调查,Laravel是世界上最受欢迎的PHP框架,有超过100万的活跃开发人员。

Laravel以其丰富的功能、灵活性和可定制性而闻名,是构建各种Web应用程序的理想选择。

以下是2023年使用人数最多的PHP MVC框架的前五名:

  1. Laravel
  2. Symfony
  3. CodeIgniter
  4. Yii
  5. Phalcon

下面是包括前面的前5名PHP MVC框架外,其他普及度较高的框架以及他们的特点介绍:

  1. Laravel:Laravel是一个功能强大的PHP MVC框架,它提供了丰富的功能,例如路由管理、数据库迁移、模板引擎等。它还有一个活跃的社区,提供了大量的文档和教程。
  2. Symfony:Symfony是一个稳定而强大的PHP MVC框架,它提供了高度可定制的组件和Bundle的概念,可以帮助开发人员构建高质量的Web应用程序。
  3. CodeIgniter:CodeIgniter是一个简单而灵活的PHP MVC框架,它具有小巧的体积和快速的执行速度。它适用于那些需要一个快速启动和简单操作的项目。
  4. Yii:Yii是一个高性能的PHP MVC框架,它提供了丰富的特性,例如活动记录、查询构建器、表单验证等。它也有一个庞大的社区,提供了大量的扩展和插件。
  5. Phalcon:Phalcon是一个高性能的PHP MVC框架,它以C语言扩展的形式嵌入到PHP中,从而提供了更快速和低内存消耗的应用程序。Phalcon还提供了丰富的特性,例如ORM、路由管理、缓存等。
  6. CakePHP:CakePHP是一个简单而灵活的PHP MVC框架,它具有强大的数据验证、数据库迁移和模板引擎等功能。它还有一个活跃的社区,提供了大量的插件和扩展。
  7. Slim:Slim是一个轻量级的PHP框架,它专注于简单性和性能。Slim非常适合构建小型和中型Web应用程序。
  8. Zend Framework:Zend Framework是一个成熟的PHP框架,它提供了许多强大的功能和工具,例如路由、ORM、缓存等等。
  9. Lumen:Lumen是Laravel的轻量级版本,它专注于简单性和性能。Lumen非常适合构建小型和中型Web应用程序。
  10. Yii2:Yii2是Yii的最新版本,它提供了许多新功能和改进。Yii2非常适合构建大型和复杂的Web应用程序。

在选择PHP MVC框架时,需要考虑以下因素:

  • 项目的大小和复杂性:对于小型和简单的项目,可以选择轻量级的框架,例如CodeIgniter或Slim。对于大型和复杂的项目,可以选择功能强大的框架,例如Laravel或Symfony。
  • 开发人员的经验水平:对于初学者,可以选择易于学习和使用的框架,例如CodeIgniter或CakePHP。对于经验丰富的开发人员,可以选择功能强大和灵活的框架,例如Laravel或Symfony。
  • 框架的社区支持:一个有活跃社区的框架,可以获得更多的帮助和支持。
javascript 用fetch上传文件示例

要使用JavaScript的fetch API上传文件,您需要使用FormData对象和fetch函数。

演示如何使用fetch API上传文件:

html<form id="fileUploadForm">
  <input type="file" id="fileInput">
  <button type="submit">上传</button>
</form>

<script>
  document.getElementById("fileUploadForm").addEventListener("submit", function(event) {
    event.preventDefault(); // 阻止表单默认提交行为

    var fileInput = document.getElementById("fileInput");
    var file = fileInput.files[0];
    var formData = new FormData();
    formData.append("file", file);

    fetch("/upload", { // 替换为您自己的上传接口地址
      method: "POST",
      body: formData
    })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error(error));
  });
</script>

我们首先获取文件输入元素和表单元素,然后创建一个FormData对象并将文件添加到其中。

接下来,我们使用fetch函数将表单数据发送到服务器。请注意,我们使用了POST方法并将表单数据作为请求体发送。

最后,我们使用then函数处理服务器响应并将结果输出到控制台。

javascript如何检测页面刷新事件?

在JavaScript中,可以使用window对象的onbeforeunload事件来检测页面刷新事件。

以下是一个简单的示例代码:

javascriptwindow.onbeforeunload = function(event) {
  event.preventDefault();
  event.returnValue = "确定要离开页面吗?";
};

在这个例子中,当用户尝试刷新或关闭页面时,onbeforeunload事件会被触发,然后调用一个函数。在这个函数中,我们阻止了默认行为(即刷新或关闭页面),并设置了event.returnValue属性,以在浏览器中显示一个警告消息。

请注意,这个事件只在用户尝试刷新或关闭页面时才会触发。如果用户点击了一个链接或执行了其他导航操作,这个事件不会触发。

php中phpinfo不显示的私密信息的方法

phpinfo()调试也好,在后台查看也好,应该适当隐藏私密信息。

一般只需要查看1,4,8,那么

echo phpinfo(13); // 即可显示模块,配置,基础信息

Name (constant)ValueDescription
INFO_GENERAL1The configuration line, php.ini location, build date, Web Server, System and more.
INFO_CREDITS2PHP Credits. See also phpcredits().
INFO_CONFIGURATION4Current Local and Master values for PHP directives. See also ini_get().
INFO_MODULES8Loaded modules and their respective settings. See also get_loaded_extensions().
INFO_ENVIRONMENT16Environment Variable information that's also available in $_ENV.
INFO_VARIABLES32Shows all predefined variables from EGPCS (Environment, GET, POST, Cookie, Server).
INFO_LICENSE64PHP License information. See also the » license FAQ.
INFO_ALL-1Shows all of the above.

 

css如何加载不在本机存在的字体,网络下载方式

在CSS中加载其他字体,主要有两种方式:

使用@font-face规则

@font-face规则允许你在CSS中定义一个字体,然后在你需要的任何地方使用它。以下是一个例子:

css

@font-face {

  font-family: "My Custom Font";

  src: url("my-custom-font.woff2") format("woff2"),

       url("my-custom-font.woff") format("woff"),

       url("my-custom-font.ttf") format("truetype");

}

在上面的代码中,我们首先定义了一个新的字体家族"My Custom Font"。然后,我们提供了多个源,包括.woff2, .woff, 和 .ttf。如果用户的浏览器支持其中一种格式,那么它就会被加载和使用。为了提供最佳的兼容性,建议提供多种字体格式。


然后,你就可以在你的CSS中使用这个字体了:

css

body {

  font-family: "My Custom Font", sans-serif;

}

  • 当前日期:
  • 北京时间:
  • 时间戳:
  • 今年的第:18周
  • 我的 IP:18.118.28.11
农历
五行
冲煞
彭祖
方位
吉神
凶神
极简任务管理 help
+ 0 0 0
Task Idea Collect