Cheeel666

задачки со скриннинга(что помню)

May 25th, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.91 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "time"
  6. )
  7.  
  8. func first() {
  9. a := make([]int, 0) // [] len 0 cap 0
  10. a = append(a, 1) // [1] len 1 cap 1
  11. a = append(a, 2) //[1, 2] len 2 cap 2
  12. a = append(a, 3) //[1, 2, 3] len 3 cap 4
  13. b := append(a, 4) // a: [1, 2, 3] l3 c4 b:[1,2,3,4] l4 c4
  14. c := append(a, 5)
  15. //a: [1, 2, 3] l3 c4
  16. //b: [1, 2, 3, 5] l4 c4
  17. //c: [1, 2, 3, 5] l4 c4(ссылается на массив b, так как капа не поменялась)
  18.  
  19. c[3] = 1
  20. // Что в a, b,c по шагам спрашивали
  21. fmt.Println(a, b, c)
  22. }
  23.  
  24. func second() {
  25. start := time.Now()
  26. _, _ = await(), await()
  27. // Сколько пройдет времени?
  28. fmt.Println(time.Since(start))
  29. }
  30.  
  31. func await() int {
  32. time.Sleep(3 * time.Second)
  33. return 1
  34. }
  35.  
  36. func third() {
  37. // Тут какие значения I в замыкании
  38. i := 0
  39. for i < 10 {
  40. go func(i int) {
  41. fmt.Println(i)
  42. }(i)
  43. i++
  44. }
  45.  
  46. var counter int
  47. for i := 0; i < 1000; i++ {
  48. go func() {
  49. counter++
  50. }()
  51. }
  52. fmt.Println(counter)
  53. }
  54. func third_fix() {
  55. for i := 0; i < 10; i++ {
  56. go func(i int) {
  57. fmt.Println(i)
  58. }(i)
  59. }
  60.  
  61. }
  62.  
  63. func fourth() {
  64. a := []string{"a", "b", "c"}
  65. for _, v := range a {
  66. go func() {
  67. fmt.Println(v)
  68. }()
  69. }
  70. // что выведет?
  71. }
  72.  
  73. func five_datarace() int {
  74. var i int
  75. go func() {
  76. i = 5
  77. }()
  78. // че вернет?
  79.  
  80. return i
  81. }
  82.  
  83. func map_test() {
  84. a := make(map[int]bool)
  85. a[0] = true
  86. a[1] = true
  87.  
  88. fmt.Println(a[0], a[1], a[2], a[3], a[4], a[5])
  89. // что выведет?
  90. }
  91.  
  92. func slice_test() {
  93. // вопрос такой: что будет в финале в arr, slice, slice_t?
  94. arr := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
  95.  
  96. slice := arr[0:5]
  97. slice_t := arr[0:1]
  98.  
  99. fmt.Println("Slice:")
  100. fmt.Println(slice, len(slice), cap(slice))
  101.  
  102. fmt.Println("Slice_t:")
  103. fmt.Println(slice_t, len(slice_t), cap(slice_t))
  104.  
  105. slice_t = append(slice_t, 10)
  106. slice_t = append(slice_t, 11)
  107. slice_t = append(slice_t, 12)
  108. slice_t = append(slice_t, 13)
  109. slice_t = append(slice_t, 14) //тут происходит хитрая штука
  110. slice_t = append(slice_t, 15)
  111.  
  112. fmt.Printf("Slice: %v \nSlice_t: %v\n\n", slice, slice_t)
  113.  
  114. fmt.Println("Slice:", slice, len(slice), cap(slice))
  115.  
  116. fmt.Println("Slice_t:", slice_t, len(slice_t), cap(slice_t))
  117.  
  118. arr[0] = -1
  119. fmt.Println("Arr:", arr, len(arr), cap(arr))
  120. }
  121.  
  122. func slice_test1() {
  123. // slice := make([]int, 0)
  124. // fmt.Println(slice, len(slice), cap(slice))
  125. // slice = append(slice, 1)
  126. // fmt.Println(slice, len(slice), cap(slice))
  127.  
  128. s := make([]byte, 3, 6)
  129. s[0] = 'a'
  130. s[1] = 'b'
  131. s[2] = 'c'
  132.  
  133. t := s //копия s, лен 3 кап 6 ссылка на тот же массив
  134. s = append(s, 'd', 'e', 'f') // у с длина выросла, капа осталась той же, у t под копотом тот же массив но длина 3
  135.  
  136. s = append(s, 'g')
  137.  
  138. fmt.Println(s, len(s), cap(s))
  139. fmt.Println(t, len(t), cap(t))
  140. }
  141.  
  142. func slice_test2() bool {
  143. a := make([]bool, 0)
  144. b := make([]bool, 0)
  145. a[0] = true
  146. b[0] = true
  147. // return a == b
  148. return false
  149.  
  150. }
  151.  
  152. // Горутины:
  153. /*
  154. GMP - горутины, маниша(потоки ОС), процессор(планировщик)
  155. горутина весит 2кб, может расти до 1гб(64)или 250мб(32) или уменьшаться. Стандартный поток в ОС весит 2мб.
  156. P распределяет G по потокам ОС(M). Изначально потоков GOMAXPROC столько же сколько ядер в ОС.
  157. Стек хранит два указателя - начало и конец памяти
  158. M - машинный тред
  159. П - Какая горутина исполняется
  160. Г - горутина
  161. создается число М, испольняется горутина, есть локальная
  162.  
  163. */
Advertisement
Add Comment
Please, Sign In to add comment