面试真题

Go · 简单 · 京东

开辟多个写协程向一个channel中写数据 是有序吗?

简单 Go 🎤 京东
参考答案
结论:多个写协程并发向同一个channel写数据,写入顺序不保证有序;channel本身不提供跨协程的写入顺序保证。
要点:
- Go channel的发送操作是原子且互斥的,但哪个协程先获得发送机会由调度器决定;
- 协程调度是随机的,因此先启动的协程不一定先写成功;
- 若需要有序,应由单一写协程负责写入,其他协程通过另channel发数据给该写协程;或使用互斥锁保护外部顺序逻辑。
示例:go f1写1,go f2写2,可能收到2然后1。原理:channel是先进先出队列,但仅针对已发送的元素,发送时机不确定。
题目整理自公开面经,答案由校招宝自研生成,仅供参考

🏢 京东 在招岗位(5 条)

保险服务 北京市-北京店长储备 上海市-上海,云南省-昆明,北京市-北京,吉林省-长春市-朝阳区,四川省-成都,四川省-成都市-新都区,天津市-天津,安徽省-合肥,安徽省-合肥市-包河区,安徽省-宿州,安徽省-淮南,安徽省-滁州,安徽省-芜湖,安徽省-蚌埠,安徽省-阜阳,山东省-济南市-历下区,山东省-济南市-历城区,山东省-青岛市-李沧区,山西省-太原,广东省-广州,广东省-深圳,广西壮族自治区-南宁,江苏省-南京,江苏省-南通,江苏省-宿迁,江苏省-徐州,江苏省-扬州,江苏省-无锡,江苏省-淮安,江苏省-盐城,江苏省-苏州,江西省-南昌,河北省-保定,河北省-廊坊,河北省-石家庄,河南省-郑州市-金水区,浙江省-宁波,浙江省-杭州,湖北省-武汉,湖南省-长沙,福建省-福州,辽宁省-沈阳,重庆市-重庆,陕西省-西安家政运营 上海市-上海,北京市-北京,吉林省-长春,四川省-成都,山东省-济南,广东省-广州,广东省-深圳,江苏省-南京,浙江省-杭州,湖北省-武汉,陕西省-西安后端开发,前端开发,客户端开发,测试,数据,运维,人工智能/算法,研发工程师,销售技术支持,通信,技术支持,产品,运营,用户研究,风控,投融资,保险,市场/营销,客服,商务,咨询/调研,财务审计,人事,行政,法务,供应链,物流,交互/设计 上海,北京,广州,成都,杭州,武汉,深圳物流储备类,门店储备类,金融风控储备类,健康储备类,客服储备类,审核储备类,金融保险储备类,销售类,人力资源类,物流防损类,财务会计类,行政类,法务风控类,健康类,品控类,运维支持类,业务支持类 上海,北京,山东等全国各地区,江苏,浙江
查看「京东」企业档案与全部在招岗位 ›