当前位置: 首页 > news >正文

Golang语言基础之切片

概述

数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性
func arraySum(x [3]int) int{sum := 0for _, v := range x{sum = sum + v}return sum
}
这个求和函数只能接受 [3]int 类型,其他的都不支持。

 

切片

切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。

切片是一个引用类型,它的内部结构包含地址长度容量。切片一般用于快速地操作一块数据集合。

切片的定义

声明切片类型的基本语法如下:
var name []T
其中,
  • name:表示变量名
  • T:表示切片中的元素类型
举个例子:
func main() {// 声明切片类型var a []string              //声明一个字符串切片var b = []int{}             //声明一个整型切片并初始化var c = []bool{false, true} //声明一个布尔切片并初始化var d = []bool{false, true} //声明一个布尔切片并初始化fmt.Println(a)              //[]fmt.Println(b)              //[]fmt.Println(c)              //[false true]fmt.Println(a == nil)       //truefmt.Println(b == nil)       //falsefmt.Println(c == nil)       //false// fmt.Println(c == d)   //切片是引用类型,不支持直接比较,只能和nil比较
}

切片的长度和容量

切片拥有自己的长度和容量,我们可以通过使用内置的len()函数求长度,使用内置的cap()函数求切片的容量。

基于数组定义切片

由于切片的底层就是一个数组,所以我们可以基于数组定义切片。
func main() {// 基于数组定义切片a := [5]int{55, 56, 57, 58, 59}b := a[1:4]                     //基于数组a创建切片,包括元素a[1],a[2],a[3]fmt.Println(b)                  //[56 57 58]fmt.Printf("type of b:%T\n", b) //type of b:[]int
}
还支持如下方式:

 

c := a[1:] //[56 57 58 59]
d := a[:4] //[55 56 57]
e := a[:]  //[55 56 57 58 59]

切片再切片

除了基于数组得到切片,我们还可以通过切片来得到切片
func processSlice2() {a := [...]string{"北京", "上海", "广州", "深圳", "成都", "重启"}fmt.Printf("a:%v type:%T len:%d cap:%d\n", a, a, len(a), cap(a))b := a[1:3]fmt.Printf("b:%v type:%T len:%d cap:%d\n", b, b, len(b), cap(b))c := b[2:5]fmt.Printf("c:%v type:%T len:%d  cap:%d\n", c, c, len(c), cap(c))
}
输出:

 

a:[北京 上海 广州 深圳 成都 重启] type:[6]string len:6 cap:6
b:[上海 广州] type:[]string len:2 cap:5
c:[深圳 成都 重启] type:[]string len:3  cap:3

理解:从b再进行切片 实际也是从a切片 只不过b切片后b := a[1:3]

中的1不存在了 而在c := b[2:5]

中的5是存在的

注意:
对切片进行再切片时,索引不能超过原数组的长度,否则会出现索引越界的错误。

使用make()函数构造切片

我们上面都是基于数组来创建的切片,如果需要动态的创建一个切片,我们就需要使用内置的 make() 函数,格式如下:
make([]T, size, cap)
其中:
  • T:切片的元素类型
  • size:切片中元素的数量
  • cap:切片的容量
举个例子:
func main() {a := make([]int, 2, 10)fmt.Println(a)      //[0 0]fmt.Println(len(a)) //2fmt.Println(cap(a)) //10
}
上面代码中 a 的内部存储空间已经分配了10个,但实际上只用了2个。 容量并不会影响当前元素的个数,所以 len(a) 返回2, cap(a) 则返回该切片的容量。

 

切片的本质

切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。

举个例子,现在有一个数组a := [8]int{0, 1, 2, 3, 4, 5, 6, 7},切片s1 := a[:5],相应示意图如下。

切片s2 := a[3:6],相应示意图如下:

切片不能直接比较

切片之间是不能比较的,我们不能使用 == 操作符来判断两个切片是否含有全部相等元素。 切片唯一合法的比较操作是和 nil 比较。 一个 nil 值的切片并没有底层数组,一个 nil 值的切片的长度和容量都是0。但是我们不能说一个长度和容量都是0的切片一定是 nil ,例如下面的示例:
var s1 []int         //len(s1)=0;cap(s1)=0;s1==nil
s2 := []int{}        //len(s2)=0;cap(s2)=0;s2!=nil
s3 := make([]int, 0) //len(s3)=0;cap(s3)=0;s3!=nil
所以要判断一个切片是否是空的,要是用 len(s) == 0 来判断,不应该使用 s == nil 来判断。

 

切片的赋值拷贝

下面的代码中演示了拷贝前后两个变量共享底层数组,对一个切片的修改会影响另一个切片的内容,这点需要特别注意。
func main() {s1 := make([]int, 3) //[0 0 0]s2 := s1             //将s1直接赋值给s2,s1和s2共用一个底层数组s2[0] = 100fmt.Println(s1) //[100 0 0]fmt.Println(s2) //[100 0 0]
}

切片遍历

切片的遍历方式和数组是一致的,支持索引遍历和 for range 遍历。
func processSliceRange() {s := []int{1, 2, 3, 4, 5}for i := 0; i < len(s); i++ {fmt.Println(s[i])}for index, value := range s {fmt.Printf("key:%d\tvalue:%d\n", index, value)}
}

append()方法为切片添加元素

Go语言的内建函数 append() 可以为切片动态添加元素。 每个切片会指向一个底层数组,这个数组能容纳一定数量的元素。当底层数组不能容纳新增的元素时,切片就会自动按照一定的策略进行“扩容”,此时该切片指向的底层数组就会更换。“扩容”操作往往发生在 append() 函数调用时。 举个例子:
func processSliceAppend() {//append()添加元素和切片扩容var numSlice []intfor i := 0; i < 10; i++ {numSlice = append(numSlice, i)fmt.Printf("%v  len:%d  cap:%d  ptr:%p\n", numSlice, len(numSlice), cap(numSlice), numSlice)}
}
输出:
[0]  len:1  cap:1  ptr:0xc00001c0a8
[0 1]  len:2  cap:2  ptr:0xc00001c0f0
[0 1 2]  len:3  cap:4  ptr:0xc0000121c0
[0 1 2 3]  len:4  cap:4  ptr:0xc0000121c0
[0 1 2 3 4]  len:5  cap:8  ptr:0xc00001a2c0
[0 1 2 3 4 5]  len:6  cap:8  ptr:0xc00001a2c0
[0 1 2 3 4 5 6]  len:7  cap:8  ptr:0xc00001a2c0
[0 1 2 3 4 5 6 7]  len:8  cap:8  ptr:0xc00001a2c0
[0 1 2 3 4 5 6 7 8]  len:9  cap:16  ptr:0xc000014280
[0 1 2 3 4 5 6 7 8 9]  len:10  cap:16  ptr:0xc000014280
从上面的结果可以看出:
  1. append()函数将元素追加到切片的最后并返回该切片。
  2. 切片numSlice的容量按照1,2,4,8,16这样的规则自动进行扩容,每次扩容后都是扩容前的2倍。
append()函数还支持一次性追加多个元素。

例如:

func processSliceAppendAll() {var citySlice []string//追加一个元素citySlice = append(citySlice, "北京")//追加多个元素citySlice = append(citySlice, "广州", "深圳")//追加切片a := []string{"切片元素1,切片元素2"}citySlice = append(citySlice, a...)fmt.Println(citySlice)
}

删除切片里的元素

Go中没有现成可用的函数来删除切片里的元素,我们必须自己“发明”函数来删除切片元素。这里介绍一种方法:
func main() {slice := []int{0, 1, 2, 3, 4, 5}fmt.Println(slice)//索引从0开始slice = RemoveIndex(slice, 3)fmt.Println(slice)
}

// RemoveIndex 删除索引
func RemoveIndex(s []int, index int) []int {
//s[:index] 包含我们想要删除的元素前面的所有元素(但不包含想要删除的元素其本身)
//s[index+1:] 包含我们想要删除的元素后面的所有元素(但不包含想要删除的元素其本身)
//… 将两个切片通过append()函数合并
return append(s[:index], s[index+1:]…)
}
输出:

 

切片元素排序

示例:
func main() {ints := []int{2, 3, -1, 4, 7, 5}fmt.Println("排序前:", ints)//正序排sort.Ints(ints)fmt.Println("排序后(正序):", ints)sort.Sort(sort.Reverse(sort.IntSlice(ints)))fmt.Println("排序后(倒序):", ints)
floats := []float64{1.1, 2.3, 0.4, -9.5, 10}
fmt.Println("排序前:", floats)
sort.Float64s(floats)
fmt.Println("排序后(正序):", floats)
sort.Sort(sort.Reverse(sort.Float64Slice(floats)))
fmt.Println("排序后(倒序):", floats)strings := []string{"aa", "a", "A", "Aa", "aab"}
fmt.Println("\n排序前:", strings)
sort.Strings(strings)
fmt.Println("排序后(正序):", strings)
sort.Sort(sort.Reverse(sort.StringSlice(strings)))
fmt.Println("倒序后(倒序):", strings)

}
使用了Go语言的排序包sort来对一个整数切片进行排序。

sort.Ints(ints)
这一行使用 sort.Ints函数对整数切片 ints进行升序排序。该函数修改原始切片,而不返回新的切片。所以 ints切片现在是按照升序排列的。
fmt.Println("排序后(正序):", ints)
这一行输出了排序后的整数切片 ints,此时它是升序排列的。
sort.Sort(sort.Reverse(sort.IntSlice(ints)))
这一行对整数切片 ints进行了降序排序。首先, sort.IntSlice(ints)将整数切片转换为 sort.Interface类型,以便在通用的 sort.Sort函数中使用。然后, sort.Reversesort.Interface类型进行逆序操作,最后 sort.Sort函数对整个切片进行排序。
fmt.Println("排序后(倒序):", ints)
最后一行输出了排序后的整数切片 ints,此时它是降序排列的。

思考题

package main

import (
“fmt”
)

func main() {
var numbers4 = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
myslice := numbers4[4:6:8]
fmt.Printf(“myslice为 %d, 其长度为: %d\n”, myslice, len(myslice))

<span class="nx">myslice</span> <span class="p">=</span> <span class="nx">myslice</span><span class="p">[:</span><span class="nb">cap</span><span class="p">(</span><span class="nx">myslice</span><span class="p">)]</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"myslice的第四个元素为: %d"</span><span class="p">,</span> <span class="nx">myslice</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>

}
为什么 myslice 的长度为2,却能访问到第四个元素

输出:

myslice为 [5 6], 其长度为: 2
myslice的第四个元素为: 8

解释:

func main() {var number4 = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}//4 是切片的起始索引(包含)//6 是切片的结束索引(不包含)//8 是切片的容量myslice := number4[4:6:8]fmt.Printf("type:%T,value:%v,len:%d,cap:%d\n", myslice, myslice, len(myslice), cap(myslice))//cap 的容量是4 所以对应的索引和值分别是://0=>5 1=>6 2=>7 3=>8myslice = myslice[:cap(myslice)]fmt.Println(myslice[1])
}

由于切片里面是指针、长度、容量

slice类型是数组的一个引用,数组arr的地址0x83029,那么slice的数据结构是[ ptr | len| cap],ptr就是指向数组arr的,就是一个指针,即存放了地址0x83029,len存放了slice的长度cap存放了slice的容量,但是这个容量是不可能超过arr的len的,所以这样看来slice是一个引用,存放的数据是在arr中,修改slice的数据,对应修改了数组的内容,所以
len是2,cap是4,那么它就可以通过ptr指针访问到arr后面的第四个元素。

相关文章:

Golang语言基础之切片

概述 数组的长度是固定的并且数组长度属于类型的一部分&#xff0c;所以数组有很多的局限性 func arraySum(x [3]int) int{sum : 0for _, v : range x{sum sum v}return sum } 这个求和函数只能接受 [3]int 类型&#xff0c;其他的都不支持。 切片 切片&#xff08;Slic…...

SpringCloud-服务消费者Fegin调用时无法获取异常信息

一、前言 假设有以下需求&#xff1a; 服务消费者A调用服务提供者B往MySQL新增一条人员信息服务提供者做了一个逻辑判断&#xff1a;若无该人员信息则新增&#xff0c;若已存在该人员信息&#xff0c;则返回给消费者异常状态码及异常信息&#xff1a;“请勿添加重复数据” 问…...

re:invent 2023 Amazon Q 初体验

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre&#xff0c;知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊云科技在2023 re:Invent全球大会上宣布推出 Amazon…...

认知觉醒(四)

认知觉醒(四) 第三节 耐心&#xff1a;得耐心者得天下 20世纪八九十年代&#xff0c;金庸的武侠小说风靡全国。如今&#xff0c;虽然几十年过去了&#xff0c;金庸先生也已与世长辞&#xff0c;但他留下的作品依然广受欢迎&#xff0c;被奉为经典。如此成就&#xff0c;自然…...

AI模型部署 | onnxruntime部署YOLOv8分割模型详细教程

本文首发于公众号【DeepDriving】&#xff0c;欢迎关注。 0. 引言 我之前写的文章《基于YOLOv8分割模型实现垃圾识别》介绍了如何使用YOLOv8分割模型来实现垃圾识别&#xff0c;主要是介绍如何用自定义的数据集来训练YOLOv8分割模型。那么训练好的模型该如何部署呢&#xff1f…...

模拟电路学习笔记(一)之芯片篇(持续更新)

模拟电路学习笔记&#xff08;一&#xff09;之芯片篇&#xff08;持续更新&#xff09; 1.CD4047BE芯片 CD4047是一种包含高电压的多谐振荡器&#xff0c;该器件的操作可以在两种模式下完成&#xff0c;分别是单稳态和非稳态。CD4047需要一个外部电阻器和电容器来决定单稳态…...

如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…...

qt 5.15.2 主窗体事件及绘制功能

qt 5.15.2 主窗体事件及绘制功能 显示主窗体效果图如下所示&#xff1a; main.cpp #include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;w.setFixedWidth(600);w.setFixedHeight(6…...

(2)(2.4) TerraRanger Tower/Tower EVO(360度)

文章目录 前言 1 安装传感器并连接 2 通过地面站进行配置 3 参数说明 前言 TeraRanger Tower 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用距离约为 4.5m。 TeraRanger Tower EVO 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用…...

Redis_主从复制、哨兵模式、集群模式详解

Redis的主从复制 为什么Redis要引入主从复制&#xff1f;what&#xff1f; 在这里博主为小伙伴们简单的做下解释&#xff0c;可以了解一下 实际生产环境下&#xff0c;单机的redis服务器是无法满足实际的生产需求的。 第一&#xff0c;单机的redis服务器很容易发生单点故障&am…...

关于神舟-战神TA5NS系统重装问题

加装固态卡在log处无法开机问题 下面是我的步骤 1.按f7选择pe安装系统&#xff0c;然后发现卡在战神log处不转动 2.下载驱动 TA5NS驱动地址 下载RAID驱动&#xff08;如果没有私信我&#xff0c;我网盘里有&#xff09;&#xff0c;拷到u盘中&#xff0c;然后进入pe系统里面…...

前端大文件上传webuploader(react + umi)

使用WebUploader还可以批量上传文件、支持缩略图等等众多参数选项可设置&#xff0c;以及多个事件方法可调用&#xff0c;你可以随心所欲的定制你要的上传组件。 分片上传 1.什么是分片上传 分片上传&#xff0c;就是将所要上传的文件&#xff0c;按照一定的大小&#xff0c;将…...

人大金仓(kingbase)数据库常用sql命令

一. 字段 1. 添加 alter table book add column book_id varchar not null, book_title varchar(10) default ;2. 删除 alter table book drop book_id, book_title;// 外键时 alter table book drop book_id, book_title cascade;3. 修改类型 alter table book alter colu…...

HashMap相关专题

前置知识&#xff1a;异或运算 异或运算介绍 异或有什么神奇之处&#xff08;应用&#xff09;&#xff1f; &#xff08;1&#xff09;快速比较两个值 &#xff08;2&#xff09;我们可以使用异或来使某些特定的位翻转&#xff0c;因为不管是0或者是1与1做异或将得到原值的相…...

threejs WebGLRenderer 像素比对画布大小的影响

官方文档 - WebGLRenderer .setPixelRatio ( value : number ) : undefined 设置设备像素比。通常用于避免HiDPI设备上绘图模糊 .setSize ( width : Integer, height : Integer, updateStyle : Boolean ) : undefined 将输出canvas的大小调整为(width, height)并考虑设备像素比…...

RocketMQTemplate.send() 与 RocketMQTemplate.syncSend() 方法详解

Apache RocketMQ 是一款强大的分布式消息中间件&#xff0c;与 Spring Boot 集成后&#xff0c;通过 RocketMQTemplate 提供了多种方法来发送消息。其中&#xff0c;send() 和 syncSend() 是两个常用的发送消息方法&#xff0c;本文将深入探讨它们的区别以及详细解释这两个方法…...

波奇学C++:类型转换和IO流

隐式类型转换 int i0; double pi; 强制类型转换 int* pnullptr; int a(int)p; 单参数构造函数支持隐式类型转换 class A { public:A(string a):_a(a){} private:string _a; }; A a("xxxx"); //"xxx" const char* 隐式转换为string 多参数也可以通过{…...

集成开发环境 PyCharm 的安装【侯小啾python基础领航计划 系列(二)】

集成开发环境PyCharm的安装【侯小啾python基础领航计划 系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…...

Java核心知识点整理大全27-笔记(已完结)

目录 30. 云计算 30.1.1. SaaS 30.1.2. PaaS 30.1.3. IaaS 30.1.4. Docker 30.1.4.1. 概念 30.1.4.2. Namespaces 30.1.4.3. 进程(CLONE_NEWPID 实现的进程隔离) 30.1.4.4. Libnetwork 与网络隔离 30.1.4.5. 资源隔离与 CGroups 30.1.4.6. 镜像与 UnionFS 30.1.4.7.…...

1. 使用poll或epoll创建echo服务器

1. 说明&#xff1a; 此篇博客主要记录一种客户端实现方式&#xff0c;和两种使用poll或者epoll分别创建echo服务器的方式&#xff0c;具体可看代码注释&#xff1a; 2. 相关代码&#xff1a; 2.1 echoClient.cpp #include <iostream> #include <cstdio> #incl…...

【对象数组根据属性排序】

// sort使用的排序方法 // 传入对象数组用于排序的对象的属性,升序/降序 function compare(property, sortType "asc") {debugger// 如果不是 asc,desc,不做下一步比较if (!(sortType "desc" || sortType "asc")) {return;}return function (…...

BACnet I/O模块:楼宇自动化的未来选择

在楼宇自动化领域&#xff0c;BACnet通信协议在确保设备之间无缝高效的数据交换方面发挥着至关重要的作用。该领域使用广泛的协议是BACnet。它使传感器、执行器和控制器等设备能够相互通信&#xff0c;从而促进工业过程的自动化。 BACNET介绍 BACnet是专门为楼宇自动化和控制系…...

android项目实战之使用框架 集成多图片、视频的上传

效果图 实现方式&#xff0c;本功能使用PictureSelector 第三方库 。作者项目地址&#xff1a;https://github.com/LuckSiege/PictureSelector 1. builder.gradle 增加 implementation io.github.lucksiege:pictureselector:v3.11.1implementation com.tbruyelle.rxpermissio…...

MyBatis查询优化:枚举在条件构建中的妙用

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…...

Isaac Sim教程04 Isaac Sim的高级使用

Isaac Sim 高级使用 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author holds…...

《数据结构、算法与应用C++语言描述》-线索二叉树的定义与C++实现

_23Threaded BinaryTree 可编译运行代码见&#xff1a;GIithub::Data-Structures-Algorithms-and-Applications/_24Threaded_BinaryTree 线索二叉树定义 在普通二叉树中&#xff0c;有很多nullptr指针被浪费了&#xff0c;可以将其利用起来。 首先我们要来看看这空指针有多少…...

删除误提交的 git commit

背景描述 某次的意外 commit 中误将密码写到代码中并且 push 到了 remote repo 里面, 本文将围绕这个场景讨论如何弥补. 模拟误提交操作 在 Gitee 创建一个新的 Repo, clone 到本地 git clone https://gitee.com/lpwm/myrepo.git创建两个文件, commit 后 push 到 remote 作…...

机器学习---pySpark案例

1、统计PV&#xff0c;UV 1.if __name__ __main__: 2. conf SparkConf() 3. conf.setMaster("local") 4. conf.setAppName("test") 5. sc SparkContext(confconf) 6. 7. #pv 8. sc.textFile("./pvuv").map(lambda line:(l…...

【链表Linked List】力扣-24 两两交换链表中的节点

目录 题目描述 解题过程 题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;he…...

企业微信协议开发,API接口调用

产品说明 一、 hook版本&#xff1a;企业微信hook接口是指将企业微信的功能封装成dll&#xff0c;并提供简易的接口给程序调用。通过hook技术&#xff0c;可以在不修改企业微信客户端源代码的情况下&#xff0c;实现对企业微信客户端的功能进行扩展和定制化。企业微信hook接口…...

做网站用哪个服务器好/seo推广网络

《读懂一本书&#xff1a;樊登读书法》_精选读后感500字我们为何要读书&#xff1f;这个问题好回答&#xff0c;也不好回答&#xff01;我们读书带着目的&#xff1f;或者不带目的&#xff1f;都不重要&#xff01;重要的是能够使自己成长和进步&#xff0c;只有这样才能积累“…...

国务院网站官网建设部/免费快速网站

前言 volitate是Java虚拟机提供的轻量级同步机制关键字&#xff0c;但是无法保证线程安全 注意三点&#xff1a;保证可见性、不保证原子性、禁止进行指令重排序。 volatile关键字特性 保证可见性 线程有工作内存&#xff0c;在操作一个变量的时候&#xff0c;会先去主内存…...

淄博营销网站建设公司/做网络推广的公司

/************关于本文档******************************************** *filename: Linux下各类TCP网络服务器的实现源代码 *purpose: 记录Linux下各类tcp服务程序源代码 *wrote by: zhoulifa(zhoulifa163.com) 周立发(http://zhoulifa.bokee.com) Linux爱好者 Linux知识传…...

网站页面组成部分/企业培训师

1.CtrlALTF1 进入控制台 2.输入用户名和密码进入系统 3.输入以下命令: cd /etc/X11 sudo cp xorg.conf.failsafe xorg.conf sudo reboot 进入系统后感觉到明显的卡顿&#xff0c;查看分辨率很低&#xff0c;而且在vm下无法全屏 解决办法&#xff1a; sudo apt-get updata…...

学做缝纫的网站/网络舆情分析研判报告

install JDKInstall hadoopRun Project on Hadoop install JDK 需要提前安装好jdk和ant。 jdk是对java程序进行编译的工具&#xff08;java development kid&#xff09; jre&#xff1a;java runtime environment是提供java虚拟机的运行环境。 ant&#xff1a;项目管理工具…...

电子商务网站建设的核心是/长沙网址seo

一、基本搜索 逻辑符 与&#xff08;空格&#xff09;、或&#xff08;OR&#xff09;、非&#xff08;-&#xff09;。 ""全匹配搜索 加入双引号表示完全匹配搜索 *通配符 二、高级搜索 intitle:只搜索网页标题(即html的title指定的部分)含有关键词的页面 例&#x…...