明源云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整个过程
  • 为什么三次握手,四次挥手
#软件开发笔面经#
全部评论
笔试好难啊
点赞 回复 分享
发布于 06-04 16:46 江西

相关推荐

1.&nbsp;你在学校哪些科目的成绩比较好?有哪些专业课比较突出?2.&nbsp;AI课程主要学了哪些内容?做过什么项目?为什么成绩好?3.&nbsp;CNN和INN这两种神经网络结构有什么区别?CNN的中文名字是什么?原理是什么?如何识别图片中的内容?4.&nbsp;除了CNN,还有哪些主流神经网络?Transformer属于哪类?有什么特点?5.&nbsp;你了解deepseek吗?它的蒸馏是怎么做的?相比传统AI模型有什么优势?如何降低成本?6.&nbsp;你平时怎么规划业余生活?在学校参加过哪些社团或活动?有哪些兴趣爱好?7.&nbsp;你未来三年有哪些职业规划?更倾向于做哪方面的工作?8.&nbsp;你觉得自己在运维方面有哪些性格或能力优势?如何理解“稳定”?什么是on&nbsp;call状态?有相关经历吗?9.&nbsp;能举例说明你遇到紧急问题时的应急处理经历吗?比如数据库崩溃、黑客入侵等,如何排查和恢复?10.&nbsp;你们用的是什么数据库?如何做数据备份和恢复?遇到勒索事件如何应对?11.&nbsp;MySQL多台部署时脑裂现象怎么恢复?有哪些集群部署方式?如何做基础加固和安全防护?12.&nbsp;MySQL配置文件一般写在哪?常见配置项有哪些?13.&nbsp;Linux下/etc/passwd和/etc/shadow的区别是什么?umask的含义是什么?文件和文件夹的最高权限是多少?755权限代表什么?14.&nbsp;你用过SSH吗?原理是什么?有哪些安全风险?如何用SSH代理?15.&nbsp;K8S中kube-proxy的作用是什么?Service的实现原理?ETCD的作用和特点?Pod有哪些调度方式?如何配置污点和亲和性?16.&nbsp;你如何理解交付岗位?日常工作内容有哪些?如何为客户写交付文档?17.&nbsp;你对公司有多少了解?公司主营业务是什么?云计算安全有哪些常见安全问题和隐患?18.&nbsp;云计算相比传统服务器有哪些优势?为什么要发展云服务?底层实现有何不同?虚拟化和云计算的区别?19.&nbsp;你对安全行业有哪些了解?有实际参与过安全项目或漏洞复现吗?对行业事件有何看法?20.&nbsp;在实验室或团队中有协调成员关系的经历吗?遇到哪些困难?如何解决?你觉得当leader最难的地方是什么?21.&nbsp;你为什么选择去上海/北京实习?对城市和岗位有何倾向?有面过哪些其他岗位?22.&nbsp;你对公司规模、团队人数、分公司分布等有了解吗?有想问面试官的问题吗?23.&nbsp;面试官对你的建议和反馈是什么?(如表达结构、亮点、案例总结等)实操相关问题1.&nbsp;数据库被黑客入侵后如何恢复?如何用备份回滚?如何加强数据库安全?2.&nbsp;MySQL如何做端口加固、用户权限分离、跳板机、IP白名单等安全措施?3.&nbsp;Linux权限管理、umask、文件权限设置等基础操作。4.&nbsp;SSH隧道、代理的使用方法和原理。5.&nbsp;K8S相关命令、调度方式、配置文件等基础实操。(注:每轮面试问题顺序可能略有不同,内容仅供参考)评价:神人面试官,我来面运维问我AI架构
查看27道真题和解析
点赞 评论 收藏
分享
08-05 13:14
已编辑
门头沟学院 Java
一、实习拷打&nbsp;10min二、八股(都是结合实习问的)10min1.Redis都有哪些用途2.Redis的数据结构你了解过有哪些3.解释一下跳表4.MySQL的执行过程5.Innodb引擎使用的什么数据结构作为索引,为什么选这个数据结构感觉百度两次面试的八股都蛮简单不知道为什么...三、算法&nbsp;10min没有在如流上写,面试官让我屏幕共享,在自己电脑上使用自己的IDE写的个人认为题目比一面的要简单,二叉树的左视图我是使用了一个set记录层数,然后优先向左下递归,这个层数在set中没有被记录过就输出这个节点的值四、设计题&nbsp;25min如何设计一个爬虫系统(爬虫是已经写好的代码,主要看你怎么架构)个人认为是本次面试的最难环节,也是自己太菜了,从来没有接触过这块面试官解释了好几遍自己才明白问的什么,最后设计出来一个可扩展性极差的系统面试官人真的很好,虽然一直在引导我但是我还是没做出来,最后自己告诉我答案,还引导我教我为什么这么设计五、反问环节面试官给了很多建议,可以多去了解一下设计相关的书籍,了解一下大模型,如何向面试官表达自己的实习经历和难点这里也需要改进...总结:面试体验很好,主要还是自己太菜了,看到了自己的很多不足,如果挂了,继续好好沉淀吧,大厂面试不是背背八股刷刷算法这么简单的
求职的纳鲁多:27啊,大佬
查看6道真题和解析
点赞 评论 收藏
分享
运维实习生一面(2025年4月)面试时间:2025年4月面试形式:语音面试面试时长:约12分钟面试流程自我介绍与背景面试官先确认了我的年级和学校所在地,我介绍自己是大三,目前课程压力不大,可以随时到岗实习。项目与技术经历主要聊了在学校实验室做运维的经历,包括负责小程序的运维、Docker部署、前后端代码编译和Nginx部署、MySQL数据库使用等。介绍了用阿里云作为主服务器,腾讯云做备份,自己写了MySQL数据库备份脚本,用rsync每天同步到腾讯云。面试官追问了备份细节、是否做多活、服务规模(访问量、数据库大小等),我如实回答是单体服务,数据量不大,主要是SQL备份,没有做多活,访问量每天不到1000,数据库文件不到100M。自学与技术栈我提到自学了Go语言,写过项目。面试官问到自动化运维相关经验,我说部署过一次K8S集群,装了Nginx,使用官方工具和网络插件(如Flannel),并解释了不同网络插件的区别和部署过程。详细描述K8S部署过程:我用的是官方的kubeadm工具,先在一台云服务器上初始化master节点,再用kubeadm&nbsp;join把另一台node节点加入集群。网络插件一开始用的是Calico,但因为两台服务器分别在不同云厂商(阿里云和腾讯云),公网环境下Calico的BGP路由不太好连通,后面改用Flannel的overlay模式,才让节点间网络打通。部署过程中遇到过证书、端口开放、网络策略等问题,都是查官方文档和社区帖子解决的。Nginx是在K8S集群里用Deployment方式部署的,配置了Service做负载均衡,整体流程从环境初始化、节点加入、网络插件选择到应用部署都自己动手实践过。监控与日志服务日志采集主要用MySQL自带日志,没有用ELK。监控方面用Prometheus,自己在Go项目里加了中间件,统计请求数和耗时。具体做法是用Prometheus的client库,在HTTP请求入口加request&nbsp;counter和request&nbsp;time的指标,暴露metrics接口给Prometheus拉取。实习意向与公司情况面试官介绍了公司运维团队和研发团队的规模,以及云平台和自建机房的情况。公司有多云环境和自建机房,能接触到GPU服务器,但具体要看个人能力和项目安排。我表达了希望能接触K8S、CI/CD等自动化运维技术,也问了是否有机会接触大模型相关服务器。面试官表示公司有相关项目,但分配要看实际情况。面试建议与流程面试官建议实习生更看重基础和学习能力,不会太在意线上大规模经验。介绍了面试流程,后续可能有HR和老板面试,结果会在一周内通知。整体面试氛围轻松,问题以项目经历和技术细节为主,K8S部署和云平台运维相关内容问得比较细。后面进来之后发现面试我的是+2,技术还是很好的,人也非常好
运维求职圈
点赞 评论 收藏
分享
评论
3
19
分享

创作者周榜

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