1. 面试准备
1.1. 自我介绍
谢谢您今天给我的这次机会,我是Green,我的专业是计算机通信,9年iOS开发经验,3年Java开发经验,担任过iOS团队负责人,有团队管理经验,有组件化开发经验,具备独立开发能力,具备文档编写能力,有良好的代码习惯。
Thank you for giving me the opportunity to be interviewed for this position today. I'm Green. My major is computer communication. I have 9 years of experience in iOS development, 3 years of experience in Java development, and served as the leader of the iOS team. I have experience in team management, component development, independent development, document writing, and good code habits.
我大学的专业是计算机通信,10年来到上海从事Java后端方面的工作,做过OA功能的系统,主要使用的技术有JavaWeb相关的技术,像JAVA、SpringMVC、HTML、JS等。从事Java大概3年多,我自学进入到了iOS行业,期间做过多媒体拍摄项目,RTC直播项目,对自研播放器有所了解。我掌握的技术章有OC、Swift,熟悉C、C++编程,掌握组件化编程,能够独立开发iOS项目。最近也学习了Flutter相关知识,通过阅读开源项目,对Flutter技术栈了解。
我的名字叫陈长青,今年34岁,我的专业是计算机通信,拥有丰富的开发经验。我擅长于使用Swift语言,进行iOS移动开发,同时我还熟悉Java、C、C++等语言,并且我可以使用SwiftUI进行开发。我最近开发的项目使用了Swift语言,是在汇丰驻场进行开发,我很喜欢客户公司环境,我也非常热爱这份工作。
My name is Changqing Chen, I am 34 years old, my major is computer communication, and I have rich development experience. I am good at using Swift language for iOS mobile application, and I am also familiar with languages such as Objc, Java, C, C++, and I can use SwiftUI for development. My last project uses Swift language. I like the client company environment very much, and I love this job very much.
我的名字叫陈长青,今年34岁,我的专业是计算机通信,拥有丰富的开发经验。我擅长于使用Swift语言,进行iOS移动开发,同时我还熟悉Java、C、C++等语言,并且我可以使用SwiftUI进行开发。我熟悉CICD,我会使用flutter,我了解iOS架构,我还熟悉敏捷开发,我还可以使用设计模式。
My name is Changqing Chen, I am 34 years old, my major is computer communication, and I have rich development experience. I am good at using Swift language for iOS mobile application, and I am also familiar with languages such as Objc, Java, C, C++, and I can use SwiftUI for development. I am familiar with CICD, I can use flutter, I understand iOS architecture, and I am familiar with scrum development, and I can use design patterns.
个人资料:一句话,占比5%左右
学习技能:半分钟~一分钟,占比20%左右
项目和经历:一分钟左右,占比45%左右
工作体会:半分钟,占比15%左右
一句话左右:职业规划,占比10%左右
一句话:兴趣占比,占比5%左右
1.2. 自我介绍v2
大家好,我的名字叫陈长青,今年35,我大学专业是计算机通信。
我擅长iOS移动开发,拥有JavaWeb开发经验,熟练使用Git等代码管理工具,熟悉Flutter、鸿蒙开发。
我Java经验3年,使用过SSH开发过OA系统,使用过SpringMVC做过网站,使用过Bootstrap、JQuery、Extjs等Js框架,使用过Oracle、Mysql等数据库。
之后我从事iOS,使用Swift、OC参与多个项目的开发,熟练掌握组件化、项目架构、设计模式等,期间还做过播放器、直播项目,对FFmpeg、OpenGL编程有所了解。
经过多年的开发,我发现编程语言是最容易的,理解编程思想和设计原理是才是重要的。
最后,我对python编程感兴趣,对代码追求完美,相信可以为公司带来价值。
1.3. 项目经验总结
1.3.1. 后端经验
- JavaWeb方面的最后一个项目是《平安健康险预授权系统》,功能就是在理赔之前对客户信息的审核。
- 当时使用了Oracle数据库,Spring、SpringMVC等技术。
- 实现的功能有客户信息的展示、客户信息的核实、展示合适结果,还就是系统权限控制等。
1.3.2. Cooplo
- iOS方面独立开发过一个全景拍照的项目,原理在iPhone上前后各安装两个180度的鱼眼镜头,通过拍摄前后两张180度的广角照片,通过算法进行拼接成全景图。
- 使用了Swift+c+c++的混合编程,当时还做了播放器,专门对全景图渲染。
- 这个项目的难点在于对不同iPhone的适配,还有就是对照片的聚焦,因为两张照片的亮度影响算法的计算还有全景图的效果,还有就是对于opengles编程的使用。
1.3.3. 汇丰银行
- 汇丰银行是一个全球性质的项目,我们当时针对中国区App做了UI方面的迭代,主要以展示为主。
- 做银行项目很多值得学习的地方:
- 代码风格比较统一,基本每个UI会对应一个ViewModel和Style这样的结构体
- 代码价格使用的是VIP的方式,这种架构适用于大型项目,面向接口,方便单元测试
- 新增的单独模块,会有一份新的代码仓库,UI实现不局限UIKit,也可以使用SwiftUI
- 对于盲人模式,代码覆盖率要求都非常高
- CICD的流程很完善,包含像代码打包上传,脚本做代码扫描,单元测试的运行、代码加固等方面
1.3.4. 期望
希望能发挥自己的特长,做出出色的产品,从而减少不要的重复工作,提高同事的工作效率,为公司带来价值,同时自己获得成长。
Hello everyone, my name is Chen Changqing, I am 35 years old this year, and my university major is computer communication.
I am good at iOS mobile development, have Java Web development experience, proficient in using Git and other code management tools, and familiar with Flutter and Harmony development.
I have 3 years of Java experience, used SSH to develop OA systems, used SpringMVC to make websites, used Bootstrap, JQuery, Extjs and other Js frameworks, and used Oracle, Mysql and other databases.
After that, I worked on iOS, used Swift and OC to participate in the development of multiple projects, and mastered componentization, project architecture, design patterns, etc. During this period, I also worked on player and live broadcast projects, and had some understanding of FFmpeg and OpenGL programming.
After years of development, I found that programming language is the easiest, and understanding programming ideas and design principles is the most important.
Finally, I am interested in python programming, pursue perfection in code, and believe that I can bring value to the company.
1.4. 擅长技术
熟练OC
、Swift
、Java
、RxSwift
、MVVM
、MVC
、Cocoapods
、GCD
、Git Flow
。
熟悉C
、C++
、Maven
、HTML
、JS
、CSS
、SQL
、Mysql
、Tomcat
、JDBC
、SSH
。
了解Android
、Flutter
、ReactNative
、libRTMP
、OpenGLES
、FFmpeg
。
视频播放器 组件化开发 设计模式 排序算法 数据结构 RSA CICD SwiftUI 敏捷开发
1.5. 如何学习
在工作中,如果遇到自己不会的问题,通过Google、百度相关资料,然后总结记录。学习一门新技术,我会通过查看其官方教程或找学习视频,同时买一本书籍阅读,然后实践,再根据自己的理解总结写文章记录。
1.6. 苹果项目经理电话准备
硬件 照片 学 底层 目标
- 自我介绍,亮点
- 工作稳定性
- 工作经验
- 硬件知识
- 学习能力及计划
- 英文练习
我的大学专业是计算机通信,今年35岁。
10年到14年从事JavaWeb方面开发,之后从事iOS编程直到现在。
我可以使用JavaWeb开发一套安全美观的管理系统,同时也可以开发iOS应用,如果涉及到多端开发,我还可以使用Flutter进行开发应用。
对于我们这个岗位,涉及到硬件,我也是很感兴趣,还有就是对于图像分析,之前我也做过全景拍照的项目,这方面的经验相信可以很好的支持我开展工作。
我对自己的要求,是每天可以进步一点点,不管是工作还是自我学习方面,希望随着时间的推移,能为公司带来更大的价值。
1.7. 职业规划
结合自身还有目前的职业环境,我有认真想过这个问题。在工作方面,我想通过积极完成工作任务,积累各方面经验,让自己成为这个领域的专业人士,也希望有机会能够带领团队,成为优秀的管理者,为单位作出更大的贡献,实现双赢。在学习方面,打算在iOS专业领域做进一步学习和研究,同时也学习Android、H5等技术,为以后自己成为管理者做下铺垫。
1.8. 提问环节
项目中会使用SwiftUI吗?
项目是针对海外客户吗?
一个功能需求下来,在开发人员开发着前,您最希望它做好哪些开发准备?
项目中难免存在一些不得不进行重构优化的代码,您是如何看待这个问题的?
其实我好奇,工作内容,比如给我一个真实的需求是怎么样的?
1.9. 面试问题
函数式编程:函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!
线程间通信:内存共享、通知、等待、锁。
swift特性:元组、可选、解包、扩展、泛型、枚举、泛型关联、命名空间、权限关键字、协议、闭包。
内存管理:Swift使用自动引用计数(ARC)来简化内存管理,与OC一致。
swift语言、架构能力、block原理、swift特性、项目管理、代码规范。
1.10. 内存管理
OC 和 Swift 的弱引用源码分析
iOS内存分配-栈和堆
1.11. 多线程
1.12. 参考链接
Swift 语言的一些功能特性
为何面试时都会问你的职业规划呢?该如何回答呢?
IOS面试题(其他) --- 英文自我介绍
1.13. 凯捷
1.13.1. 代码加固**
https://zhuanlan.zhihu.com/p/33109826
1.字符串混淆
对应用程序中使用到的字符串进行加密,保证源码被逆向后不能看出字符串的直观含义。
2.类名、方法名混淆
对应用程序的方法名和方法体进行混淆,保证源码被逆向后很难明白它的真正功能。
3.程序结构混淆加密
对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。
4.反调试、反注入等一些主动保护策略
这是一些主动保护策略,增大破解者调试、分析App的门槛。
1.13.2. 文件名重复会有什么影响
https://blog.csdn.net/weixin_33994429/article/details/93696758
duplicate symbol问题
1.13.3. swift和oc的区别
1.Swift和Objective-C共用一套运行时环境,Swift的类型可以桥接到Objective-C。
2.swift是静态语言,有类型推断,更加安全,OC是动态语言。
3.swift支持泛型,OC只支持轻量泛型
4.Swift速度更快,运算性能更高。
5.Swift的访问权限变更。
7.Swift便捷的函数式编程。
8.swift有元组类型、支持运算符重载
9.swift引入了命名空间。
10.swift支持默认参数。
11.swift比oc代码更加简洁。
1.13.4. struct和class的区别
https://blog.csdn.net/baidu_40537062/article/details/108349757
1.struct是值类型(Value Type),深拷贝。class是引用类型(Reference Type),浅拷贝。
2.类允许被继承,结构体不允许被继承。
3.类中的每一个成员变量都必须被初始化,否则编译器会报错,而结构体不需要,编译器会自动帮我们生成init函数,给变量赋一个默认值。
4.NSUserDefaults:Struct 不能被序列化成 NSData 对象,无法归解档。
5.当你的项目的代码是 Swift 和 Objective-C 混合开发时,你会发现在 Objective-C 的代码里无法调用 Swift 的 Struct。因为要在 Objective-C 里调用 Swift 代码的话,对象需要继承于 NSObject。
6.class像oc的类一样,可以用kvo,kvc,runtime的相关方法,适用runtime系统。这些struct都不具备。
7.内存分配:struct分配在栈中,class分配在堆中。struct比class更“轻量级”(struct是跑车跑得快,class是SUV可以载更多的人和货物)。
1.13.5. 验证HTTPS证书
- 客户端向服务器发送支持的SSL/TSL的协议版本号,以及客户端支持的加密方法,和一个客户端生成的随机数。
- 服务器确认协议版本和加密方法,向客户端发送一个由服务器生成的随机数,以及数字证书。
- 客户端验证证书是否有效,有效则从证书中取出公钥,生成一个随机数,然后用公钥加密这个随机数,发给服务器。
- 服务器用私钥解密,获取发来的随机数。
- 客户端和服务器根据约定好的加密方法,使用前面生成的三个随机数,生成对话密钥,用来加密接下来的整个对话过程。
作者:阿拉斯加大狗 链接:https://juejin.cn/post/6844903892765900814 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1.13.6. H5信息存储在哪
localStorage与?区别 cookie
1.13.7. 图片宽高未知的情况下怎么自适应高度
- Model层异步下载图片,然后缓存图片及图片宽高。
- 图片显示先占位,按需加在图片,缓存图片及图片宽高,reload指定Cell。
- 上传图片告诉服务器图片尺寸。
- 通过约束让Cell高度随图片自适应。
1.13.8. push很多页面后怎么控制导航栏里面的子控制器
- push到相同页面产生递归。
- 内存回收处理。
1.13.9. 灵动岛
https://www.51cto.com/article/742613.html
展示: 紧凑(Compact)、最小化(Minimal)、扩展(Expanded)
开发框架:ActivityKit(实时活动)、SwiftUI(UI)、WidgetKit(小组件)
实时活动权限
1.13.10. 静态库制作
https://www.jianshu.com/p/8ea45370a20d
1.13.11. XCFramework
1.13.12. H5的http拦截
1.13.13. RSA 1024 2048区别
1.13.14. Git分之管理
1.13.15. 支付
1.13.16. flutter
1.13.17. Profile
10年以上开发经验,掌握iOS移动开发、JavaWeb开发;掌握Swift、OC、Java等多种高级语言;掌握SwiftUI开发;掌握MVC、MVVM、MVP架构模式;掌握HTML+JS;掌握Git;掌握iOS上架审核;掌握单元测试;掌握数据库编程;熟悉Runtime、Runloop、多线程及内存管理;熟悉多种组件化开发、设计模式;了解CICD(Fastlane、Jenkins);了解Flutter、鸿蒙。
More than 10 years of development experience, mastering iOS mobile development, JavaWeb development; mastering Swift, OC, Java and other high-level languages; mastering SwiftUI development; mastering MVC, MVVM, MVP architecture patterns; mastering HTML+JS; mastering Git; mastering iOS listing review; mastering unit testing; mastering database programming; familiar with Runtime, Runloop, multi-threading and memory management; familiar with various component-based development and design patterns; understanding CICD (Fastlane, Jenkins); understanding Flutter and Hongmeng.
1.13.18. Experience
工作前3年从事Java,最近10年从事iOS。
使用Swift、SwiftUI做过银行项目,可以熟练编写单元测试;
使用CTMedia、Cocoapods对直播项目组件化;
使用shell脚本+Jenkins打包;
使用FFmpeg、OpenGL做过播放器;
使用过Flutter实现双端开发;
使用过SSH开发过OA系统;
使用过SpringMVC做过网站;
使用过Bootstrap、JQuery、Extjs等Js框架;
使用过Oracle、Mysql等数据库。
I worked on Java for the first 3 years and iOS for the last 10 years.
I have used Swift and SwiftUI to work on banking projects and can write unit tests proficiently;
I have used CTMedia and Cocoapods to componentize live broadcast projects;
I have used shell scripts + Jenkins for packaging;
I have used FFmpeg and OpenGL to make players;
I have used Flutter to achieve dual-end development;
I have used SSH to develop OA systems;
I have used SpringMVC to make websites;
I have used Js frameworks such as Bootstrap, JQuery, and Extjs;
I have used databases such as Oracle and Mysql.