FunPlus面经(2016-11-20更新)

本文分享了一次游戏开发工程师面试的经历,包括自我介绍、技术问答环节、设计模式讨论及职业规划等,涉及游戏图像渲染技术、游戏引擎、快速排序算法、矩阵链乘问题、设计模式、C++虚函数实现等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一面:投的全栈工程师,实际面的是游戏开发工程师。

首先自我介绍,balabala…

让说说了解哪些游戏开发的技术和为什么做游戏开发

问了懂不懂游戏图像渲染技术,了不了解游戏引擎(好尴尬,都不了解)

问了快速排序的实现,一些细节,为什么是先修改右边的值,空间复杂度(这里和面试官理解不太对,他一直以为我不对,我一直说我这么做是对的)

看了下附加题,问我是不是遇到过矩阵链乘这个题目(好尴尬,毕竟dp经典题)

之后问知道哪些设计模式(单例,工厂,命令,代理,观察者)

问了下单例模式中需要注意的点

给了一个题目,I am a Boy——-Boy a am I

用代码写出来(我最开始使用了栈,问我能不能不用栈)

问了C 的虚函数实现原理(C 了解不太深,猜了一个虚函数表)

最后问愿意做前端还是后端

有什么问题想问?

问了还有几轮面试(面试官说后面还有一到两轮面试)

二面: 刚面完二面,答的不太好(问了面试官,之后没有面试了)
说游戏开发中的技术(我提到了网络编程,linux,高并发(把自己坑惨了))
问了服务器中多个玩家在线,怎么解决(先说缓存(然而并不知道怎么实现),又说分布式(面试官说游戏逻辑用分布式不好实现))
问了几个游戏开发的问题,游戏中boss刷新,玩家一直增加,内存一直增加,很快就会耗尽内存,应该怎么解决(我扯了扯线程池技术(现在想想应该用内存池技术,java用久了都给忘了),被面试官揭穿在转移话题,说不是一类问题)
问了一个智力题:四个人拿电筒过河,1,2,5,10分钟。。。(挺常见的题)
问懂不懂数据库优化 问懂不懂脚本语言 问了职业规划(说了自己对大数据感兴趣,面试官很感兴趣,一直在问有没有demo(好尴尬,总共就学习了两天,环境都没有搭建起来))

uid=291711630&game_version=1.8.19&appid=73&product_id=cn.gof.whiteoutsurvival.gem17&domain=funsdk&id_card=43252419991120****&sdk_version=U7.0.58.1-GOFCN-2&verify_status=1&bi_data={"event":"payment","app_id":"gof.cn.prod","data_version":"2.0","ts":1747839497001,"session_id":"a02017300029171163010795145","user_id":"291711630","properties":{"type":"alipay","iap_product_id":"cn.gof.whiteoutsurvival.gem17","sdk_report_enable":0,"iap_product_name":"cn.gof.whiteoutsurvival.gem17","payment_processor":"alipay","android_id":"7961af0ec5e554a0","device":"SKW-A0","sdk_version":"U7.0.58.1-GOFCN-2","data_from":"android_phone","tag":"funplus","package_name":"com.gof.china","device_id":"","oaid":"","mac":"02:00:00:00:00:00","backend_open_reyun_dot":1,"gameserver_id":"2894","level":"1","vip_level":"1","app_version":"1.8.19.73","os":"android","os_version":"9","lang":"zh_CN","game_user_id":"127627213","app_install_ts":1747832901665,"install_ts":"1747834354000","time_zone":"+08:00","os_sdk_number":28,"sha-1":"27:23:41:91:A8:91:84:6B:DA:DD:97:FC:6B:D6:C8:47:E6:83:6D:3F","adid":"28e2daa2b27a29bacbb94afeb95a8ba5","currency":"CNY","sdk_distinct_id":"5a3cc3adc35544cb1d0df92c5e4a5ecb","ua":"Mozilla/5.0+(Linux;+Android+9;+SKW-A0+Build/PQ3A.190705.05091555;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/91.0.4472.114+Mobile+Safari/537.36","install_source":"funplus","install_channelid":""}}&through_cargo=eyJnaWQiOjUwMDAwMDAsImFiYnIiOiJwcm9kIiwidWlkIjoxMjc2MjcyMTN9解析支付链接
最新发布
05-22
### 解析支付链接中的参数和数据结构 解析支付链接的关键在于理解其参数组成以及如何有效提取这些信息。以下是对这一过程的具体说明: #### 1. **支付链接的常见字段** 支付链接通常包含多个重要字段,例如用户标识符、金额、货币类型、游戏版本号、支付处理器名称等。这些字段一般以键值对的形式嵌入到URL中[^1]。例如: ``` https://payment.example.com/process?userId=12345&amount=99.99¤cy=USD&gameVersion=v1.0&processor=paypal ``` #### 2. **解析URL中的参数** URL 中的查询字符串可以通过编程语言的标准库轻松解析为字典或映射表。下是一个 Python 实现的例子,展示如何从 URL 提取参数并转化为易于访问的数据结构: ```python from urllib.parse import urlparse, parse_qs def extract_payment_parameters(payment_url): parsed_url = urlparse(payment_url) query_parameters = parse_qs(parsed_url.query) # 将列表形式的值转为单个值 (假设每个键只有一个对应的值) parameters_dict = {key: value[0] for key, value in query_parameters.items()} return parameters_dict # 示例支付链接 payment_link = "https://payment.example.com/process?userId=12345&amount=99.99¤cy=USD&gameVersion=v1.0&processor=paypal" parameters = extract_payment_parameters(payment_link) print(parameters) # 输出: {'userId': '12345', 'amount': '99.99', 'currency': 'USD', 'gameVersion': 'v1.0', 'processor': 'paypal'} ``` 此代码片段展示了如何将 URL 的查询部分分解成一个字典,便于后续处理。 #### 3. **验证与安全性考量** 在实际应用中,除了简单的解析外,还需要注意数据的安全性和有效性校验。这包括但不限于以下几点: - 验证 `userId` 是否合法,并确认是否存在对应账户记录[^4]。 - 确认金额 (`amount`) 和货币类型 (`currency`) 符合预期范围及格式要求。 - 检查 `gameVersion` 参数是否匹配当前支持的游戏版本清单。 - 核实指定的支付处理器 (`processor`) 是受信任的服务商之一。 为了防止恶意攻击者篡改支付链接的内容,建议引入签名机制或者使用 HTTPS 协议传输敏感数据[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值