Men的博客

欢迎光临!

0%

面试难点

GPU原理

顶点着色
图元装配
光栅化
片着色
片段处理

Runtime

获取属性、方法、成员变量、协议、交换方法、动态获取类、生成类实例

RunLoop

它是一个处理事件的循环 包括: Source/Timer/Observer/Port
处理事件:事件响应、手势识别、界面刷新、{AutoreleasePool}自动释放池、{NSTimer}等事件处理。

多线程

线程类型、锁类型、延迟执行、分组执行、栅栏方法、信号量

内存管理

当一个对象在创建之后它的引用计数器值加1,当调用这个对象的alloc、retain、new、copy方法之后引用计数器值自动在原
来的基础上加1,当调用这个对象的release方法之后它的引用计数器值减1,如果一个对象的引用计数器值为0,则系统会自动
调用这个对象的dealloc方法来销毁这个对象。

应用优化

一、首页启动速度   
    启动过程中做的事情越少越好、不在UI线程上作耗时的
    操作、在合适的时机开始后台任务、尽量减小包的大小
二、页面浏览速度
    json的处理、数据压缩、内容缓存、算法的优化
三、操作流畅度优化:
    见tableVIew的优化
四、数据库的优化:
    数据库设计上面的重构、查询语句的优化、分库分表
五、服务器端和客户端的交互优化:
    客户端尽量减少请求、服务端尽量做多的逻辑
    处理、通信协议的优化
六、非技术性能优化
    产品逻辑性、代码规范、界面交互规范等

卡顿检测

1.使用instrument
2.在程序运行期间能及时获取卡顿信息Runloop

项目架构设计

Auto Layout原理

Auto Layout本质就是一个线性方程解析Engine。基于Auto Layout的布局,不在需要像frame时代一样,关注视图尺寸、位置的常数,转而关注视图之间关系,描述一个表示视图间布局关系的约束集合,由Engine解析出最终数值。

二分查找

排序

冒泡、选择、插入、希尔、归并、快速、堆

问题2:
本地生活,说实话,我总感觉目前的互联网还没有渗透到最后的地方,我们没有办法找到周边的东西,除了像外卖一样,我们能查看到周边的美食也能送到我们身边,其他的我们没有感觉高非常的方便。
我们如何才能提高这方面的效率呢?那我们怎么能做到这一点呢?
一个什么样的产品能够拉近商家和用户的距离呢?
一个什么样的产品能够促使用户能够付费呢?
很多东西我们往往去互联网上买,但是实际上我们周边就有这样的产品,是不是我们用更简单的方式会更好。
从抖音来看,用户更倾向于设计自己的东西,越来越知道打造自己ip的重要性,那么我们能不能为用户提供这样的打造自己ip的场景。
为什么一定是抖音才能打造自己的ip,为什么我们不行。
随着生活水平的提供,中国人应该越来越懂得消费了,应该也知道如何消费了,
从目前来看中国人的消费水平和旅游的能力还是偏低的,我们如何才能提高消费的透明度。
旅游ip平台。
从上海这次疫情来看,当这种封闭的形式到来之后,人民的饮食生活还是受到影响。

https://github.com/imaNNeoFighT/fl_chart

Flutter的绘制能力是得到验证了,且有开源的代码,绘制这个方向应该是比较开放
Flutter文档编写方面,现在研究的是markdown,目前也实现了一款markdown的编辑器,还算成功
Flutter图表展示,目前看echarts是有插件的,此外还有其他的插件,应该是不是问题
Flutter地图,目前看只能是高德地图,其它的还没有成型
flutter json解析,非常麻烦,不适合做
Flutter word、excel预览 具备,但是都是采用的比较常规的一些插件
flutter 直播
flutter 拍照
flutter 美颜

flutter常用框架

Getx原理剖析
1.getx响应式原理
getx存在Getbuilder和obs两种方式
Builder实际上是创建一个statefulWidget,实现了刷新的机制
Obs实际上是重写了数据对象int、string、list、map等,在对象内实现了监听的绑定。
在获取value时候进行绑定监听。
Obs实际上使用StreamSubscription来实现的。比较适合单个组件数据的更新
Getbuilder是使用statefulWidget setState实现的。比较适合多个组件数据的批量更新。

依赖管理:

整理自己的知识点
1.cesium,可以开源一下
2.

Flutter网络请求架构
retrofit + dio + json_annotation
1.为什么要使用retrofit
注解的方式生成请求 Rest Api 的各种方法,会让服务接口更清晰。
接口参考如下:
@GET(“helloword”)
Future helloword(@Query(“date”) String date);
@RestApi、@GET、@POST、@Query

retrofit会为我们生成对应的.g.dart。我们在对应文件里面用dio实现网络请求
2.dio
Dio 一个强大的 Dart Http 请求库,支持 Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等…
3.json_annotation
根据json字符串的结构和字段构造实体类,通过注解,生成对应的.g.dart类
@JsonSerializable()

Flutter 页面封装(加载中,成功,失败,空数据)
1.toast mixin ToastMixin
2.网络请求
abstract class BaseController extends SuperController with ToastMixin
{

}
3.列表刷新的布局
封装当前页码,上拉,下拉等

shared_preferences脱离context的封装
我们将shared_preferences保存到getx中,可以实现从getx中获取shared_preferences数据。

如果想要了解async、await的原理,就要先了解协程的概念,async、await本质上就是协程的一种语法糖。协程,也叫作coroutine,是一种比线程更小的单元。如果从单元大小来说,基本可以理解为进程->线程->协程。
协程分为无线协程和有线协程,无线协程在离开当前调用位置时,会将当前变量放在堆区,当再次回到当前位置时,还会继续从堆区中获取到变量。所以,一般在执行当前函数时就会将变量直接分配到堆区,而async、await就属于无线协程的一种。
由于并没有开启新的线程,只是进行IO中断改变CPU调度,所以网络请求这样的异步操作可以使用async、await,但如果是执行大量耗时同步操作的话,应该使用isolate开辟新的线程去执行。
isolate的整体模型我自己的理解其实更像进程,而async、await更像是线程”。如果对比一下isolate和进程的定义,会发现确实isolate很像是进程。

#数据json解析(官方框架)
json_annotation: ^4.4.0 # null safe
json_serializable: ^6.1.1 # null safe

标注为@JsonSerializable的类,会生成对应的.g.dart类
flutter网络请求实现
网络请求框架基于Retrofit+Dio实现,配合官方JsonSerialize实现解析;

封装列表页面下拉刷新+上拉加载更多等
Keframe 方案:分帧入屏 ,既然单帧的绘制时间太长,那我们就将一帧分成多帧。
将屏幕上的 widget 扔进一个执行队列,将模块内的时间做拆分,多个 widget 不同时进行绘制,一个绘制完成后再进行下一个 widget 的绘制。

cached_network_image:它可以将网络图像进行本地缓存,在需要的时候直接加载,提供了两个使用方法

基于getx的页面封装:
1.我们的类是继承在GetView上的。
getView可以获取到controller
2.我们的每个类都要有toast提示,所以我们添加了mixin, with Toast
3.我们根据页面常用描述实现了很多页面绘制的展示,如导航栏、侧边栏、标题,是否显示等
4.我们基类页面实现了基Basegetxcontroller。
Basegetxcontroller封装
1.继承于getx的SuperController
2.我们的每个类都要有toast提示,所以我们添加了mixin, with Toast
3.controller一般都会有网络业务逻辑,所以我们封装了网络请求的接口
BaseRefreshController封装带刷新页面控制器
1.定义加载状态 0加载中 1加载成功 2加载数据为空 3加载失败
2.定义页码
3.实现上拉下拉接口

Flutter本地数据库管理
我们知道spring是一个非常流行的框架,对于数据管理也是有dao、service等一些概念,这些概念用到flutter中也是同样适用的,所以我们非常高兴的来设计flutter种数据库设计
我们采用数据库框架drift 原名moor
依赖:
dependencies:
drift: ^1.0.1
sqlite3_flutter_libs: ^0.5.0
path_provider: ^2.0.0
path: ^1.8.0

dev_dependencies:
drift_dev: ^1.0.2
build_runner: ^2.1.4

1.使用 drift, 可以用简单的 Dart 代码基于表结构创建 Model
2.编写sql语句,包括表创建,增删改查接口等
3.编写database.dart 文件,关联drift表
4.用flutter packages pub run build_runner build 生成全部代码。

web页面截图工具

颜色转换工具
https://pub.flutter-io.cn/packages/color_convert
http工具
https://pub.flutter-io.cn/packages/alice

表格
https://pub.flutter-io.cn/packages/responsive_table

https://pub.flutter-io.cn/packages/flutterbook/install

https://pub.flutter-io.cn/packages/graphx
dart_clipboard
keframe
json_view
fluent_ui
https://github.com/MaikuB/flutter_local_notifications
https://pub.flutter-io.cn/packages/flutter_quill
https://pub.flutter-io.cn/packages/syncfusion_flutter_datagrid_export
file_picker_cross
hotkey_manager
connectivity_plus

常常在想自己的价值在哪里,这真的是要命了,公司一个人一个人的走了,我还剩下什么。
我感觉公司现在就剩下根了,我们的价值还能体现吗?我们还能给公司创造财富吗?
就我们几个人,我们还能撑起多大的项目。我们努力这么久,现在就只能是这样了吗?
这么多的商务,人事,项目经理,难道就撑不起这个公司了吗?真的是让人透心凉啊。
不管了,我去做核酸了。

无论如何把自己锻炼成一个大前端软件开发者,这样能应对以后复杂的社会环境。
不要想自己如何努力就能成功,还是要脚踏实地,人生就是有那么多起伏曲折,我们不可能这么顺利
走一步看一步吧,起码现在我们都在努力的活着,起码现在我们的工资是有保障的。
我们也不要去想未来,我们也不要考虑有没有未来,我们现在这么几个人,无论创造什么样的价值,我们都是值得
flutter pub run build_runner build