明源云golang后端实习笔试

笔试是真不会啊,20个选择,2个编程,3个简答,感觉408都考了,不会的问ai生成一下

选择

有单选和多选,只记得一些了,挑难点的写一下

  1. UDP报文头部不包括哪些内容
  2. http状态码和对应的含义(多选,7个选项好像😅)
  3. http请求报文不包括哪些东西(请求头,请求行,请求体)
  4. mysql中truncate和delete区别
  5. mysql存储时间数据timestamp和datetime之间比较
  6. 给定前序和中序,给出后序遍历的结果
  7. 哪些情况需要切换到内核态: 写入文件,创建子进程、取模

编程(只允许golang)

  • 写一个Connection类,用于建立对不同数据库(比如oracle,sql server)的连接,用户通过配置文件建立连接
package dbconnector

import (
	"database/sql"
	"encoding/json"
	"errors"
	"fmt"
	"os"
	
	// 数据库驱动(需要先安装)
	_ "github.com/microsoft/go-mssqldb"       // SQL Server
	_ "github.com/sijms/go-ora/v2"           // Oracle
	_ "github.com/go-sql-driver/mysql"        // MySQL
	_ "github.com/lib/pq"                     // PostgreSQL
)

// 配置结构体
type DBConfig struct {
	DBType     string `json:"db_type"`    // 数据库类型
	Host       string `json:"host"`       // 主机地址
	Port       int    `json:"port"`       // 端口号
	Username   string `json:"username"`  // 用户名
	Password   string `json:"password"`  // 密码
	Database   string `json:"database"`  // 数据库名/SID
	SSLMode    string `json:"ssl_mode"`  // SSL模式(PostgreSQL需要)
	Parameters string `json:"parameters"`// 额外参数
}

// 连接管理器
type Connection struct {
	config DBConfig
	db     *sql.DB
}

// 创建新连接实例
func NewConnection(configFile string) (*Connection, error) {
	// 读取配置文件
	config, err := loadConfig(configFile)
	if err != nil {
		return nil, err
	}

	// 创建连接字符串
	connStr, err := buildConnectionString(config)
	if err != nil {
		return nil, err
	}

	// 建立数据库连接
	db, err := sql.Open(getDriverName(config.DBType), connStr)
	if err != nil {
		return nil, fmt.Errorf("连接失败: %v", err)
	}

	// 验证连接
	if err = db.Ping(); err != nil {
		return nil, fmt.Errorf("连接验证失败: %v", err)
	}

	return &Connection{
		config: config,
		db:     db,
	}, nil
}

// 获取数据库连接对象
func (c *Connection) GetDB() *sql.DB {
	return c.db
}

// 关闭连接
func (c *Connection) Close() error {
	if c.db != nil {
		return c.db.Close()
	}
	return nil
}

// 加载配置文件
func loadConfig(path string) (DBConfig, error) {
	var config DBConfig
	file, err := os.ReadFile(path)
	if err != nil {
		return config, fmt.Errorf("配置文件读取失败: %v", err)
	}
	
	if err := json.Unmarshal(file, &config); err != nil {
		return config, fmt.Errorf("配置文件解析失败: %v", err)
	}
	
	return config, nil
}

// 构建连接字符串
func buildConnectionString(config DBConfig) (string, error) {
	switch config.DBType {
	case "oracle":
		return fmt.Sprintf("oracle://%s:%s@%s:%d/%s",
			config.Username, config.Password, config.Host, config.Port, config.Database), nil
	case "sqlserver":
		return fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;%s",
			config.Host, config.Username, config.Password, config.Port, config.Database, config.Parameters), nil
	case "postgres":
		return fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
			config.Host, config.Port, config.Username, config.Password, config.Database, config.SSLMode), nil
	case "mysql":
		return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s",
			config.Username, config.Password, config.Host, config.Port, config.Database, config.Parameters), nil
	default:
		return "", errors.New("不支持的数据库类型")
	}
}

// 获取驱动名称
func getDriverName(dbType string) string {
	switch dbType {
	case "oracle": return "oracle"
	case "sqlserver": return "sqlserver"
	case "postgres": return "postgres"
	case "mysql": return "mysql"
	default: return ""
	}
}
  • 两个协程交替打印1-100
//两个协程交替打印1到100

package main

import (
	"fmt"
	"sync"
)

func main() {
	var wg sync.WaitGroup
	wg.Add(2)
	ch := make(chan struct{})

	go func() {
		defer wg.Done()
		for i := 1; i <= 100; i += 2 {
			fmt.Printf("g 1 print %v\n", i)
			ch <- struct{}{}
			<-ch
		}
	}()

	go func() {
		defer wg.Done()
		for i := 2; i <= 100; i += 2 {
			<-ch
			fmt.Printf("g 2 print %v\n", i)
			ch <- struct{}{}
		}
	}()

	wg.Wait()
}

简答

  • mysql B+树原理,时间复杂度空间复杂度,并且和B树和跳表比较
  • 浏览器输入url整个过程
  • 为什么三次握手,四次挥手
#软件开发笔面经#
全部评论
笔试好难啊
2 回复 分享
发布于 06-04 16:46 江西

相关推荐

点赞 评论 收藏
分享
11-02 20:28
门头沟学院 Java
也是实习转正,已oc行云集团&nbsp;一面1.自我介绍2.自选cursor/Claude&nbsp;code/idea&nbsp;ai编程插件,在线投屏完成编程题目:3.项目中,线程池的作用4.用了线程池和不用线程池区别5.线程池的构造方法有哪些参数,作用6.拒绝策略有哪些7.AQS原理8.基于AQS实现的类9.CAS原理,会出现的问题,ABA10.有哪些加锁的方式11.ReentrantLock和@synchronized区别12.JVM分为哪些内存区域13.使用过的数据库有哪些14.索引有哪些类型15.加索引一定会生效吗16.事务的特性17.开启事务的方法18.什么情况下事务会失效,先开启事务还是先开启锁,反过来会有什么问题19.慢接口如何排查优化反问:公司技术栈,负责的业务,对面试的评价项目和实习都没怎么问,ai开发的题目挺简单的,前面边ai开发会边问常用的mcp,还有prompt怎么写的,平时怎么使用的,配置在哪里,有没有了解过Subagent,ai的问题比较多,但是都挺简单的————————————————————行云集团&nbsp;二面1.自我介绍2.学校经历3.一面没答出的问题重新回答4.根据面试官投屏的代码,说有什么问题:(有5-6张图,应该是面试官根据简历项目生成的ai代码,就是去看代码逻辑有什么问题)缓存过期时间没设置,线程池没关闭,临时文件没清理,线程池配置,无界队列,异常没抛出捕获;然后是方案选择,就是对着选择的方案说异步高并发相关知识什么的了5.面试官给开源项目,展示一下用什么方式熟悉项目的6.常用的ai工具7.Claude模型的区别8.Ai最近有什么新特性9.了解最新技术的渠道————————————————————行云集团&nbsp;三面1.自我介绍2.实习经历介绍3.给一万个用户发短信,怎么设计,中途宕机了怎么解决4.共享电脑屏幕看一下之前写的项目代码,问代码为什么要这么设计5.Post和get请求区别6.http状态码&nbsp;301,302什么意思,场景是什么7.redis用法8.高并发抢购场景怎么设计,怎么防止超卖9.反问————————————————————行云集团&nbsp;四面&nbsp;hr面就是到岗时间还有转正意向什么的经典问题
点赞 评论 收藏
分享
评论
4
25
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务