golang笔试题
ztj100 2025-05-16 18:04 10 浏览 0 评论
package main
import "fmt"
func main() {
slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 := slice[2:5]
s2 := s1[2:6:7]
s2 = append(s2, 100)
s2 = append(s2, 200)
s1[2] = 20
fmt.Println(s1)
fmt.Println(s2)
fmt.Println(slice)
}
答案:
[2 3 20]
[4 5 6 7 100 200]
[0 1 2 3 20 5 6 7 100 9]
题目2:
package main
func main() {
s := []int{1, 1, 1}
f(s)
fmt.Println(s)
}
func f(s []int) {
for i := range s {
s[i] += 1
}
}
答案:[2 2 2]
题目3:
package main
import "fmt"
func myAppend(s []int) []int {
s = append(s, 100)
return s
}
func myAppendPtr(s *[]int) {
*s = append(*s, 100)
return
}
func main() {
s := []int{1, 1, 1}
newS := myAppend(s)
fmt.Println(s)
fmt.Println(newS)
s = newS
myAppendPtr(&s)
fmt.Println(s)
}
结果:[1 1 1] [1 1 1 100] [1 1 1 100 100]
题目4:
func test() int {
x := 1
defer func() {
x = 2
}()
return x
}
func main() {
fmt.Println(test())
}
/*
return x 先计算 x 的值,即 1,但还未真正返回。
defer 执行,将 x 赋值为 2,但不会影响已计算的返回值。
最终返回 1。
*/
题目5:
func test() (x int) {
x = 1
defer func() {
x = 2
}()
return x
}
func main() {
fmt.Println(test())
}
/*
x 是命名返回值,return x 计算时
x=1,但未立即返回。
defer 执行,把 x 改为 2。
return 返回 x=2,最终返回值是 2。
*/
题目6:
func deferFunc() int {
fmt.Println("defer func called")
return 0
}
func returnFunc() int {
fmt.Println("return func called")
return 0
}
func returnAndDefer() int {
defer deferFunc()
return returnFunc()
}
func main() {
returnAndDefer()
}
/*
结果:return func called
defer func called
结论为:return之后的语句先执行,defer后的语句后执行*/
题目7:
func main() {
defer fmt.Println("defer 1")
defer fmt.Println("defer 2")
panic("发生 panic 了!") // 触发 panic
defer fmt.Println("defer 3") // 这行不会执行
}
/*
结果:
defer 2
defer 1
panic: 发生 panic 了!
*/
func main() {
defer_call()
fmt.Println("main 正常结束")
}
func defer_call() {
defer func() {
fmt.Println("defer: panic 之前1, 捕获异常")
if err := recover(); err != nil {
fmt.Println(err)
}
}()
defer func() { fmt.Println("defer: panic 之前2, 不捕获") }()
panic("异常内容") //触发defer出栈
defer func() { fmt.Println("defer: panic 之后, 永远执行不到") }()
}
/*
结果:
defer: panic 之前2, 不捕获
defer: panic 之前1, 捕获异常
异常内容
main 正常结束
*/
func main() {
defer fmt.Println("defer 1")
defer func() {
if r := recover(); r != nil {
fmt.Println("捕获 panic:", r)
}
}()
defer fmt.Println("defer 2")
panic("触发 panic")
defer fmt.Println("defer 3") // 不会执行
}
/*
结果:
defer 2
捕获 panic: 触发 panic
defer 1
*/
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
} else {
fmt.Println("fatal")
}
}()
defer func() {
panic("defer panic")
}()
panic("panic")
}
/*
结果:
defer panic
recover() 只能捕获最近的 panic,不会捕获被后续 panic 覆盖的 panic。
后进先出(LIFO)执行 defer 语句,所以 defer panic 发生后,原来的 panic("panic") 就被丢弃了。
如果 recover() 能捕获 panic,则程序不会崩溃。*/
题目8:
func function(index int, value int) int {
fmt.Println(index)
return index
}
func main() {
defer function(1, function(3, 0))
defer function(2, function(4, 0))
}
/*
结果:
3
4
2
1
这里面有两个defer, 所以defer一共会压栈两次,先进栈1,后进栈2。
那么在压栈function1的时候,需要连同函数地址、函数形参一同进栈,
那么为了得到function1的第二个参数的结果,所以就需要先执行function3将第二个参数算出,
那么function3就被第一个执行。同理压栈function2,就需要执行function4算出function2第二个参数的值。
然后函数结束,先出栈fuction2、再出栈function1.
*/
题目9:
package main
import "fmt"
func DeferFunc1(i int) (t int) {
t = i // t = 1
defer func() {
t += 3 // t = t + 3 = 1 + 3 = 4
}()
return t // 先计算返回值 t=1,然后执行 defer 修改 t=4
}
func DeferFunc2(i int) int {
t := i // t = 1 (局部变量)
defer func() {
t += 3 // 由于 t 不是命名返回值,对返回值无影响
}()
return t // 直接返回 t=1,defer 修改的是局部变量,不影响返回值
}
func DeferFunc3(i int) (t int) {
defer func() {
t += i // t = t + i = 2 + 1 = 3
}()
return 2 // 先计算返回值 t=2,再执行 defer 修改 t=3
}
func DeferFunc4() (t int) {
defer func(i int) {
fmt.Println(i) // 0 (因为 defer 传递的是 t 的拷贝)
fmt.Println(t) // 2 (defer 运行时 t 已被 return 修改)
}(t)
t = 1
return 2 // 先计算返回值 t=2,再执行 defer
}
func main() {
fmt.Println(DeferFunc1(1)) // 1 -> 4
fmt.Println(DeferFunc2(1)) // 1
fmt.Println(DeferFunc3(1)) // 3
DeferFunc4() // 0, 2
}
/*
结果:
4
1
3
0
2
*/
题目10:
package main
import (
"fmt"
)
type student struct {
Name string
Age int
}
func main() {
//定义map
m := make(map[string]*student)
//定义student数组
stus := []student{
{Name: "zhou", Age: 24},
{Name: "li", Age: 23},
{Name: "wang", Age: 22},
}
//将数组依次添加到map中
for _, stu := range stus {
m[stu.Name] = &stu
}
//打印map
for k,v := range m {
fmt.Println(k ,"=>", v.Name)
}
}
/*
结果:
遍历结果出现错误,输出结果为
zhou => wang
li => wang
wang => wang
map 中的 3 个 key 均指向数组中最后一个结构体。
*/
题目11:
func main() {
s := make(map[string]int)
delete(s, "h")
fmt.Println(s["h"])
}
A. runtime panic
B. 0
C. compilation error
/*
删除 map 不存在的键值对时,不会报错,相当于没有任何作用;
获取不存在的减值对时,返回值类型对应的零值,所以返回 0。
*/
题目12:
func main() {
i := -5
j := +5
fmt.Printf("%+d %+d", i, j)
}
A. -5 +5
B. +5 +5
C. 0 0
/*
A,%d表示输出十进制数字,+表示输出数值的符号。
*/
题目13:
type People struct{}
func (p *People) ShowA() {
fmt.Println("showA")
p.ShowB()
}
func (p *People) ShowB() {
fmt.Println("showB")
}
type Teacher struct {
People
}
func (t *Teacher) ShowB() {
fmt.Println("teacher showB")
}
func main() {
t := Teacher{}
t.ShowB()
}
/*
teacher showB。
*/
题目14:
定义一个包内全局字符串变量,下面语法正确的是(多选):
A. var str string
B. str := ""
C. str = ""
D. var str = ""
/*
AD。
B 只支持局部变量声明;C 是赋值,str 必须在这之前已经声明。
*/
题目15:
func hello(i int) {
fmt.Println(i)
}
func main() {
i := 5
defer hello(i)
i = i + 10
}
/*
5。即使 hello 函数被延迟执行,它所获取的 i 参数的值会在 defer 语句被执行时已经确定
*/
题目16:
func incr(p *int) int {
*p++
return *p
}
func main() {
p :=1
incr(&p)
fmt.Println(p)
}
A. 1
B. 2
C. 3
/*
B。指针,incr() 函数里的 p 是 *int 类型的指针,指向的是 main() 函数的变量 p 的地址。
第 2 行代码是将该地址的值执行一个自增操作,incr() 返回自增后的结果。
*/
题目17:
对add()函数调用正确的是?
func add(args ...int) int {
sum := 0
for _, arg := range args {
sum += arg
}
return sum
}
A. add(1, 2)
B. add(1, 3, 7)
C. add([]int{1, 2})
D. add([]int{1, 3, 7}...)
/*
ABD。可变函数,因为它要求传递若干 int,A、B 显然正确;
C 是数组或切片,不对;D 把切片展开,其实就是若干 int,也对
*/
题目18:
func main() {
ch1 := make(chan int)
go fmt.Println(<-ch1)
ch1 <- 5
time.Sleep(1 * time.Second)
}
A:5、
B:不能编译;
C:运行时死锁
/*
C。go 语句后面的函数调用,其参数会先求值,这和普通的函数调用求值一样。go fmt.Println(<-ch1) 语句中的 <-ch1 是在 main goroutine 中求值的。这相当于一个无缓冲的 chan,发送和接收操作都在一个 goroutine 中(main goroutine)进行,因此造成死锁。
defer 语句也要注意。比如下面的做法是不对的:defer recover()
而应该使用这样的方式:
defer func() {
recover()
}()
*/
题目19:
func main() {
ch1 := make(chan int)
go func(){
fmt.Println(<-ch1)
}()
ch1 <- 5
time.Sleep(1 * time.Second)
}
A:5、
B:不能编译;
C:运行时死锁
/*
A。当 ch1 <- 5 执行时,主 goroutine 会阻塞在这一行,
直到另一个 goroutine 开始执行并准备好接收数据为止。
因为在这个例子中,接收操作是由匿名 goroutine 执行的,
所以发送和接收操作是在不同的 goroutine 中执行的,不会发生死锁
*/
题目20:
func main() {
// 创建一个 map
m := map[string]int{"a": 1, "b": 2, "c": 3}
// 保存要删除的键
keysToDelete := []string{}
// 遍历 map
for key, value := range m {
fmt.Println(key, value)
// 满足某个条件时,保存要删除的键
if value == 2 {
keysToDelete = append(keysToDelete, key)
}
}
// 在遍历完成后删除元素
for _, key := range keysToDelete {
delete(m, key)
}
/*
A 21
B 22
C 23
counter is 3
或
B 22
C 23
counter is 2
取决于 map 的遍历顺序。
*/
题目21:
关于switch语句,下面说法正确的有?
A. 条件表达式必须为常量或者整数;
B. 单个case中,可以出现多个结果选项;
C. 需要用break来明确退出一个case;
D. 只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case;
/*
参考答案及解析:BD。
switch 的条件表达式可以是任意类型(不限于常量或整数)
switch x {
case 1, 2, 3: // 匹配 1、2 或 3
fmt.Println("x is 1, 2, or 3")
case 4, 5:
fmt.Println("x is 4 or 5")
}
Go 的 switch 默认自动 break,不需要手动写 break。
如果想继续执行下一个 case,必须显式使用 fallthrough:
switch x {
case 1:
fmt.Println("1") // 默认 break,不会进入 case 2
case 2:
fmt.Println("2")
}
switch x {
case 1:
fmt.Println("1")
fallthrough // 强制进入 case 2
case 2:
fmt.Println("2") // 会执行
default:
fmt.Println("default")
}
*/
题目22:
func main() {
defer_call()
}
func defer_call() {
defer func() { fmt.Println("打印前") }()
defer func() { fmt.Println("打印中") }()
panic("触发异常")
defer func() { fmt.Println("打印后") }()
}
/*
打印中
打印前
panic: 触发异常
*/
题目23:
func main() {
var i interface{}
if i == nil {
fmt.Println("nil")
return
}
fmt.Println("not nil")
}
A. nil B. not nil C. compilation error
/*
B. not nil
*/
题目24:
func main() {
var b *int = nil
var i interface{} = b
if i == (*int)(nil){
fmt.Println("nil")
return
}
fmt.Println("not nil")
}
A. nil B. not nil C. compilation error
/*
A. nil
*/
题目25:
// 1.
func main() {
s := make([]int, 5)
s = append(s, 1, 2, 3)
fmt.Println(s)
}
// 2.
func main() {
s := make([]int,0)
s = append(s,1,2,3,4)
fmt.Println(s)
}
/*
[0 0 0 0 0 1 2 3]
[1 2 3 4]
*/
题目26:
通过指针变量 p 访问其成员变量 name,有哪几种方式?
A.p.name
B.(&p).name
C.(*p).name
D.p->name
/*
AC。& 取址运算符,* 指针解引用
*/
题目27:
下面这段代码能否编译通过?如果可以,输出什么?
const (
x = iota
_
y
z = "zz"
k
p = iota
)
func main() {
fmt.Println(x,y,z,k,p)
}
/*
0 2 zz zz 5
_: 是一个空白标识符,用于占位,它会使 iota 增加,但不会创建一个命名常量。
k: 没有显式赋值,因此会重复上一个非空白标识符的值,即 "zz"
p: 被赋值为当前 iota 的值。由于 iota 在上一行定义时未被使用(显式赋值中断了 iota 的递增),
所以 iota 会继续递增
*/
题目28:
下面这段代码能否编译通过?如果可以,输出什么?
func GetValue() int {
return 1
}
func main() {
i := GetValue()
switch i.(type) {
case int:
println("int")
case string:
println("string")
case interface{}:
println("interface")
default:
println("unknown")
}
}
/*
编译错误,正确写法如下
func GetValue() interface{} {
return 1
}
func main() {
i := GetValue()
switch v := i.(type) {
case int:
println("int")
case string:
println("string")
case interface{}:
println("interface")
default:
println("unknown")
}
}
*/
题目29:
type person struct {
name string
}
func main() {
var m map[person]int
p := person{"mike"}
fmt.Println(m[p])
}
A.0
B.1
C.Compilation error
/*
A。打印一个 map 中不存在的值时,返回元素类型的零值。
这个例子中,m 的类型是 map[person]int,因为 m 中不存在 p,所以打印 int 类型的零值,即 0。
*/
题目30:
func main() {
a := 5
b := 8.1
fmt.Println(a + b)
}
A.13.1
B.13
C.compilation error
/*
C。a 的类型是 int,b 的类型是 float,两个不同类型的数值不能相加,编译报错
*/
题目31:
func main() {
a := [5]int{1, 2, 3, 4, 5}
t := a[3:4:4]
fmt.Println(t[0])
}
A.3
B.4
C.compilation error
/*
B。[i,j,k],长度:j-i,容量:k-i。
*/
题目32:
func main() {
a := [2]int{5, 6}
b := [3]int{5, 6}
if a == b {
fmt.Println("equal")
} else {
fmt.Println("not equal")
}
}
A. compilation error
B. equal
C. not equal
/*
A。Go 中的数组是值类型,可比较,另外一方面,数组的长度也是数组类型的组成部分,
所以 a 和 b 是不同的类型,是不能比较的,所以编译错误。
*/
题目33:
关于 cap() 函数的适用类型,下面说法正确的是()
A. array
B. slice
C. map
D. channel
/*
ABD
len() 和 cap() 的区别:
len() 适用于 array、slice、map、channel,返回当前元素数量。
cap() 适用于 array、slice、channel,返回底层存储容量。
对 map 使用 cap() 会直接导致编译错误。
*/
题目34:
type People struct{}
func (p *People) ShowA() {
fmt.Println("showA")
p.ShowB()
}
func (p *People) ShowB() {
fmt.Println("showB")
}
type Teacher struct {
People
}
func (t *Teacher) ShowB() {
fmt.Println("teacher showB")
}
func main() {
t := Teacher{}
t.ShowA()
}
/*
showA showB
结构体嵌套。Teacher 没有自己 ShowA(),所以调用内部类型 People 的同名方法,
需要注意的是第 5 行代码调用的是 People 自己的 ShowB 方法。
*/
题目35:
下面代码下划线处可以填入哪个选项?
func main() {
var s1 []int
var s2 = []int{}
if __ == nil {
fmt.Println("yes nil")
}else{
fmt.Println("no nil")
}
}
A. s1
B. s2
C. s1、s2 都可以
/*
A
s1 被声明为一个切片类型,但没有被初始化。在这种情况下,s1 的默认值是 nil。
s2 被声明为一个空的切片。虽然 s2 是空的,但它已经被初始化,不是 nil。
一个空切片的长度和容量为零,但它不等于 nil。
*/
题目36:
func main() {
i := 65
fmt.Println(string(i))
}
A. A
B. 65
C. compilation error
/*
A。UTF-8 编码中,十进制数字 65 对应的符号是 A。
*/
题目37:
func main() {
var i interface{}
if i == nil {
fmt.Println("nil")
return
}
fmt.Println("not nil")
}
A. nil
B. not nil
C. compilation error
/*
A。当且仅当接口的动态值和动态类型都为 nil 时,接口类型值才为 nil。
*/
题目38:
const (
a = iota
b = iota
)
const (
name = "name"
c = iota
d = iota
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
/*
参考答案及解析:0 1 1 2。
知识点:iota 的用法。
iota 是 golang 语言的常量计数器,只能在常量的表达式中使用。
iota 在 const 关键字出现时将被重置为0,const中每新增一行常量声明将使 iota 计数一次。
*/
题目39:
type Math struct {
x, y int
}
var m = map[string]Math{
"foo": Math{2, 3},
}
func main() {
m["foo"].x = 4
fmt.Println(m["foo"].x)
}
A. 4
B. compilation error
/*
参考答案及解析:B,编译报错 cannot assign to struct field m["foo"].x in map。
错误原因:对于类似 X = Y的赋值操作,必须知道 X 的地址,才能够将 Y 的值赋给 X,
但 go 中的 map 的 value 本身是不可寻址的。
有两个解决办法:
a.使用临时变量
type Math struct {
x, y int
}
var m = map[string]Math{
"foo": Math{2, 3},
}
func main() {
tmp := m["foo"]
tmp.x = 4
m["foo"] = tmp
fmt.Println(m["foo"].x)
}
b.修改数据结构
type Math struct {
x, y int
}
var m = map[string]*Math{
"foo": &Math{2, 3},
}
func main() {
m["foo"].x = 4
fmt.Println(m["foo"].x)
fmt.Printf("%#v", m["foo"]) // %#v 格式化输出详细信息
}
*/
题目40:
var p *int
func foo() (*int, error) {
var i int = 5
return &i, nil
}
func bar() {
//use p
fmt.Println(*p)
}
func main() {
p, err := foo()
if err != nil {
fmt.Println(err)
return
}
bar()
fmt.Println(*p)
}
A. 5 5
B. runtime error
/*
参考答案及解析:B。知识点:变量作用域。问题出在操作符:=,对于使用:=定义的变量,
如果新变量与同名已定义的变量不在同一个作用域中,那么 Go 会新定义这个变量。
对于本例来说,main() 函数里的 p 是新定义的变量,会遮住全局变量 p,导致执行到bar()时程序,
全局变量 p 依然还是 nil,程序随即 Crash。
func main() {
var err error
p, err = foo() // 使用赋值(=)而不是短声明(:=)
if err != nil {
fmt.Println(err)
return
}
bar() // 现在全局 p 有效,输出 5
fmt.Println(*p) // 输出 5
}
*/
题目41:
A、B、C、D 哪些选项有语法错误?
type S struct {
}
func f(x interface{}) {
}
func g(x *interface{}) {
}
func main() {
s := S{}
p := &s
f(s) //A
g(s) //B
f(p) //C
g(p) //D
}
/*
语法错误的选项:B 和 D
*interface{} 是一种特殊的指针类型,不能直接从其他类型的值或指针隐式转换。
var i interface{} = s
g(&i)
var i interface{} = p
g(&i)
*/
题目42:
下面 A、B 两处应该填入什么代码,才能确保顺利打印出结果?
type S struct {
m string
}
func f() *S {
return __ //A
}
func main() {
p := __ //B
fmt.Println(p.m) //print "foo"
}
/*
参考答案及解析:
A. &S{"foo"}
B. *f() 或者 f()
f() 函数返回参数是指针类型,所以可以用 & 取结构体的指针;B 处,
如果填 *f(),则 p 是 S 类型;如果填 f(),则 p 是 *S 类型,
不过都可以使用 p.m 取得结构体的成员
*/
题目43:
实现使用字符串函数名,调用函数。
思路:采用反射的Call方法实现。
package main
import (
"fmt"
"reflect"
)
type Animal struct{
}
func (a *Animal) Eat(){
fmt.Println("Eat")
}
func main(){
a := Animal{}
reflect.ValueOf(&a).MethodByName("Eat").Call([]reflect.Value{})
}
题目44:
有三个函数,分别打印"cat", "fish","dog"要求每一个函数都用一个goroutine,按照顺序打印100次。
package main
import (
"fmt"
"time"
)
var dog = make(chan struct{})
var cat = make(chan struct{})
var fish = make(chan struct{})
func Dog() {
<-fish
fmt.Println("dog")
dog <- struct{}{}
}
func Cat() {
<-dog
fmt.Println("cat")
cat <- struct{}{}
}
func Fish() {
<-cat
fmt.Println("fish")
fish <- struct{}{}
}
func main() {
for i := 0; i < 100; i++ {
go Dog()
go Cat()
go Fish()
}
fish <- struct{}{}
time.Sleep(10 * time.Second)
}
题目45:
两个协程交替打印10个字母和数字
思路:采用channel来协调goroutine之间顺序。
package main
import (
"fmt"
"time"
)
var word = make(chan struct{}, 1)
var num = make(chan struct{}, 1)
func printNums() {
for i := 0; i < 10; i++ {
<-word
fmt.Println(1)
num <- struct{}{}
}
}
func printWords() {
for i := 0; i < 10; i++ {
<-num
fmt.Println("a")
word <- struct{}{}
}
}
func main() {
num <- struct{}{}
go printNums()
go printWords()
time.Sleep(time.Second * 1)
}
题目46:
启动 2个groutine 2秒后取消, 第一个协程1秒执行完,第二个协程3秒执行完。
思路:采用ctx, _ := context.WithTimeout(context.Background(), time.Second*2)
实现2s取消。协程执行完后通过channel通知,是否超时。
package main
import (
"context"
"fmt"
"time"
)
func f1(in chan struct{}) {
time.Sleep(1 * time.Second)
in <- struct{}{}
}
func f2(in chan struct{}) {
time.Sleep(3 * time.Second)
in <- struct{}{}
}
func main() {
ch1 := make(chan struct{})
ch2 := make(chan struct{})
ctx, _ := context.WithTimeout(context.Background(), 2*time.Second)
go func() {
go f1(ch1)
select {
case <-ctx.Done():
fmt.Println("f1 timeout")
break
case <-ch1:
fmt.Println("f1 done")
}
}()
go func() {
go f2(ch2)
select {
case <-ctx.Done():
fmt.Println("f2 timeout")
break
case <-ch2:
fmt.Println("f2 done")
}
}()
time.Sleep(time.Second * 5)
}
- 上一篇:Golang 中的调试技巧
- 下一篇:golang2021函数与包(36)内置函数
相关推荐
- 拒绝躺平,如何使用AOP的环绕通知实现分布式锁
-
如何在分布式环境下,像用synchronized关键字那样使用分布式锁。比如开发一个注解,叫@DistributionLock,作用于一个方法函数上,每次调方法前加锁,调完之后自动释放锁。可以利用Sp...
- 「解锁新姿势」 兄dei,你代码需要优化了
-
前言在我们平常开发过程中,由于项目时间紧张,代码可以用就好,往往会忽视代码的质量问题。甚至有些复制粘贴过来,不加以整理规范。往往导致项目后期难以维护,更别说后续接手项目的人。所以啊,我们要编写出优雅的...
- 消息队列核心面试点讲解(消息队列面试题)
-
Rocketmq消息不丢失一、前言RocketMQ可以理解成一个特殊的存储系统,这个存储系统特殊之处数据是一般只会被使用一次,这种情况下,如何保证这个被消费一次的消息不丢失是非常重要的。本文将分析Ro...
- 秒杀系统—4.第二版升级优化的技术文档二
-
大纲7.秒杀系统的秒杀活动服务实现...
- SpringBoot JPA动态查询与Specification详解:从基础到高级实战
-
一、JPA动态查询概述1.1什么是动态查询动态查询是指根据运行时条件构建的查询,与静态查询(如@Query注解或命名查询)相对。在业务系统中,80%的查询需求都是动态的,例如电商系统中的商品筛选、订...
- Java常用工具类技术文档(java常用工具类技术文档有哪些)
-
一、概述Java工具类(UtilityClasses)是封装了通用功能的静态方法集合,能够简化代码、提高开发效率。本文整理Java原生及常用第三方库(如ApacheCommons、GoogleG...
- Guava 之Joiner 拼接字符串和Map(字符串拼接join的用法)
-
Guave是一个强大的的工具集合,今天给大家介绍一下,常用的拼接字符串的方法,当然JDK也有方便的拼接字符串的方式,本文主要介绍guava的,可以对比使用基本的拼接的话可以如下操作...
- SpringBoot怎么整合Redis,监听Key过期事件?
-
一、修改Redis配置文件1、在Redis的安装目录2、找到redis.windows.conf文件,搜索“notify-keyspace-events”...
- 如何使用Python将多个excel文件数据快速汇总?
-
在数据分析和处理的过程中,Excel文件是我们经常会遇到的数据格式之一。本文将通过一个具体的示例,展示如何使用Python和Pandas库来读取、合并和处理多个Excel文件的数据,并最终生成一个包含...
- 利用Pandas高效处理百万级数据集,速度提升10倍的秘密武器
-
处理大规模数据集,尤其是百万级别的数据量,对效率的要求非常高。使用Pandas时,可以通过一些策略和技巧显著提高数据处理的速度。以下是一些关键的方法,帮助你使用Pandas高效地处理大型数据集,从而实...
- Python进阶-Day 25: 数据分析基础
-
目标:掌握Pandas和NumPy的基本操作,学习如何分析CSV数据集并生成报告。课程内容...
- Pandas 入门教程 - 第五课: 高级数据操作
-
在前几节课中,我们学习了如何使用Pandas进行数据操作和可视化。在这一课中,我们将进一步探索一些高级的数据操作技巧,包括数据透视、分组聚合、时间序列处理以及高级索引和切片。高级索引和切片...
- 原来这才是Pandas!(原来这才是薯片真正的吃法)
-
听到一些人说,Pandas语法太乱、太杂了,根本记不住。...
- python(pandas + numpy)数据分析的基础
-
数据NaN值排查,统计,排序...
- 利用Python进行数据分组/数据透视表
-
1.数据分组源数据表如下所示:1.1分组键是列名分组键是列名时直接将某一列或多列的列名传给groupby()方法,groupby()方法就会按照这一列或多列进行分组。按照一列进行分组...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)