go基础知识
-
go struct 能不能进行比较
-
go什么情况下回发生内存泄漏
-
go defer (for defer),实现先进后出,后进先出
-
说说对Go的channel理解
-
Go中slice的len()和cap()函数有什么区别
-
实际和形式参数之间有什么区别
-
主协程如何等其余协程完在操作
-
map如何顺序读取
-
线程的栈在哪里分配
-
goruntine顺序打印1-10 【channel实现】
-
goruntine的泄漏问题
扫描二维码关注公众号,回复: 10815024 查看本文章 -
线程调度
-
goruntine中的P指的是什么【Processor】
groutine能拥有强大的并发实现是通过GPM调度模型实现,
goroutine的调度模型Go的调度器内部有四个重要的结构:M,P,S,Sched
M:M代表内核级线程,一个M就是一个线程,goroutine就是跑在M之上的;M是一个很大的结构,里面维护小对象内存cache(mcache)、当前执行的goroutine、随机数发生器等等非常多的信息
G:代表一个goroutine,它有自己的栈,instruction pointer和其他信息(正在等待的channel等等),用于调度。
P:P全称是Processor,处理器,它的主要用途就是用来执行goroutine的,所以它也维护了一个goroutine队列,里面存储了所有需要它来执行的goroutine
Sched:代表调度器,它维护有存储M和G的队列以及调度器的一些状态信息等。 -
context释义
HTTP
-
session的跨域共享,都有哪些实现方式
-
HTTP 401、403、301、201状态码代表什么
SQL
-
mysql的慢查询问题,通过什么方式来排查
-
MyIsam和InnoDB引擎的主要特点
-
防SQL注入方法有哪些
ORM
1.orm操作
现有结构体如下:
type User struct {
Id int64
Name string
Status int
Amount int64
AmountStr string
UpdateTime string
Version string
}
数据库表如下:
TB_USER
ID(bigint) | NAME(varchar) | STATUS(int) | UPDATE_TIME(DATATIME) | VER |
---|---|---|---|---|
123456789012345678 | 张三 | 1 | 2018-06-20 16:32:00 | a99 |
123456789012345679 | 李四 | 2 | 2018-06-20 16:32:01 | a98 |
123456789012345680 | 王五 | 1 | NULL | a99 |
TB_USER_AMOUNT
ID(bigint) | USER_ID(bigint) | AMOUNT(bigint) |
---|---|---|
123456789012345676 | 123456789012345678 | 100 |
123456789012345677 | 123456789012345680 | 1000 |
数据库字段与结构体对应关系为:
User结构体 | TB_USER表 | TB_USER_AMOUNT表 |
---|---|---|
Id | ID | USER_ID |
Name | NAME | - |
Sstatus | STATUS | - |
Amount | - | AMOUNT |
AmountStr | - | - |
UpdateTime | UPDATE_TIME | - |
Version | VER | - |
- 1.结构体User 可以添加标签,但是不能修改字段及字段类型
- 2.先请使用熟悉的orm 包查询状态为1的用户信息(包括TB_USER表内容及TB_USER_AMOUNT内容)并复制到 info中(info := new(User))
- 3.请将Info内容使用json序列化后返回给页面操作
- a. 其中时间字符串要求格式为:
4位年份-2位月份-2位日期 (2位小时数 : 2位分钟数) - b. Version字段不返回,Amount字段的值放入AmountStr中返回
- c. 注意,页面可能会使用ID字段进行接下来的业务请求
- d. 返回方法默认已经定义好为:returnMsg(msg string),可直接调用
- e. TB_USER_AMOUNT中AMOUNT字段是以分为单位,返回的info中的AmountStr字段要求以元为单位,并保留2位小数
- a. 其中时间字符串要求格式为:
创建测试环境表
# CREATE database
CREATE DATABASE IF NOT EXISTS `TT` CHARACTER SET = utf8mb4;
# SWITCH database
USE `TT`;
CREATE TABLE IF NOT EXISTS `TB_USER` (
`ID` bigint(18) AUTO_INCREMENT,
`NAME` varchar(30) NOT NULL DEFAULT '',
`STATUS` int(1) NOT NULL DEFAULT 1,
`UPDATE_TIME` datetime DEFAULT NULL,
`VER` varchar(3),
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=123456789012345678 DEFAULT CHARSET=utf8mb4;
INSERT INTO `TT`.`TB_USER` (`NAME`, `STATUS`, `UPDATE_TIME`, `VER`) VALUES ('张三', '1', '2018-06-20 16:32:00', 'a99');
INSERT INTO `TT`.`TB_USER` (`NAME`, `STATUS`, `UPDATE_TIME`, `VER`) VALUES ('李四', '2', '2018-06-20 16:32:01', 'a98');
INSERT INTO `TT`.`TB_USER` (`NAME`, `STATUS`, `UPDATE_TIME`, `VER`) VALUES ('王五', '1', null, 'a99');
SELECT * FROM `TT`.`TB_USER`;
CREATE TABLE IF NOT EXISTS `TB_USER_AMOUNT` (
`ID` bigint(18) AUTO_INCREMENT,
`USER_ID` bigint(18) ,
`AMOUNT` bigint,
FOREIGN KEY (`USER_ID`) REFERENCES `TB_USER` (`ID`),# 给从表做外键约束,映射主表的id
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=123456789012345676 DEFAULT CHARSET=utf8mb4;
INSERT INTO `TT`.`TB_USER_AMOUNT` (`USER_ID`, `AMOUNT`) VALUES (123456789012345678,100);
INSERT INTO `TT`.`TB_USER_AMOUNT` (`USER_ID`, `AMOUNT`) VALUES (123456789012345680,1000);
SELECT * FROM `TT`.`TB_USER_AMOUNT`;
解答:
方式1:使用beego的orm:github.com/astaxie/beego/orm
1.添加结构体标签
type User struct {
Id int64 `orm:"pk;auto;column(ID)"`
Name string `orm:"column(NAME)"`
Status int `orm:"column(STATUS)"`
Amount int64 `orm:"-"`
AmountStr string `orm:"-"`
UpdateTime string `orm:"null;column(UPDATE_TIME)"`
Version string `orm:"column(VER)"`
}
// 自定义表名
func (u *User) TableName() string {
return "TB_USER"
}
Linux
-
linux下查看当前系统负载信息的一些方法
-
vim的基本快捷键集rpm/apt/yum/ports装包,查询,删除的基本命令