2023-05-26:golang关于垃圾回收和析构的选择题,代码如下:
package main
import (
"fmt"
"runtime"
"time"
)
type ListNode struct {
Val int
Next *ListNode
}
func main0() {
a := &ListNode{Val: 1}
b := &ListNode{Val: 2}
runtime.SetFinalizer(a, func(obj *ListNode) {
fmt.Printf("a被回收--")
})
runtime.SetFinalizer(b, func(obj *ListNode) {
fmt.Printf("b被回收--")
})
a.Next = b
b.Next = a
}
func main() {
main0()
time.Sleep(1 * time.Second)
runtime.GC()
time.Sleep(1 * time.Second)
runtime.GC()
time.Sleep(1 * time.Second)
runtime.GC()
time.Sleep(1 * time.Second)
runtime.GC()
time.Sleep(1 * time.Second)
runtime.GC()
fmt.Print("结束")
}
代码的运行结果是什么?并说明原因。注意析构是无序的。
A. 结束
B. a被回收--b被回收--结束
C. b被回收--a被回收--结束
D.B和C都有可能
明天给出答案和解析。这道题来自qq群。
以下是凑字数的,不要看。
给定一个正整数 x,我们将会写出一个形如 x (op1) x (op2) x (op3) x ... 的表达式
其中每个运算符 op1,op2,… 可以是加、减、乘、除之一
例如,对于 x = 3,我们可以写出表达式 3 * 3 / 3 + 3 - 3,该式的值为3
在写这样的表达式时,我们需要遵守下面的惯例:
除运算符(/)返回有理数
任何地方都没有括号
我们使用通常的操作顺序:乘法和除法发生在加法和减法之前
不允许使用一元否定运算符(-)。例如,“x - x” 是一个有效的表达
因为它只使用减法,但是 “-x + x” 不是,因为它使用了否定运算符
我们希望编写一个能使表达式等于给定的目标值 target 且运算符最少的表达式。
返回所用运算符的最少数量。
输入:x = 5, target = 501。
输出:8。