dart

2020互联网寒冬之下,作为一个Android老码农,是如何进入腾讯的?

混江龙づ霸主 提交于 2020-11-19 23:56:06
由于众所周知的原因,原生Android开发如今已经日渐凋敝,作为一个Android程序员,不仅要会Java,Kotlin,JavaScript,Css,Html,还要会Flutter,C++,FFmpeg,Linux等相关知识。 笔者从7月份开始面试,到8月中旬截止(因为腾讯已经面试通过,自己面试面的也累了,就决定去腾讯了) 接下来就说说各家的面试题,一共面试了快二十家公司,既有外包,也有中小型企业,也有准备D轮甚至上市的C轮企业,更有BAT等知名企业。 接下来就一一说一下各家公司的面试题。 也建议各位面试的时候不要上来就直奔BAT等,大厂面试官的技术广度与深度也不是刚出来面试的你,能搞定的。最好先去一些小公司看看他们问的哪些东西,自己回去在查漏补缺一下,刷书大厂的面试题,最后去大厂。 最后祝各位能进入自己心仪的公司。 按照面试的时间顺序来一一罗列各家公司的面试题。(记忆可能出现纰漏,哈哈,各位看看就好,有些公司的面试可能比较常规,就没有什么特别的印象) 武汉佰钧成(外包OPPO,自家面试官) 因为是周六的专场面试,也不用请假,所以马上就参加了这家公司的面试。 两轮面试 Activity的启动流程 Activity的启动模式,应用场景 如何减少对第三方框架的耦合 hashmap的基本原理 博彦科技(外包OPPO,OPPO面试官) 两轮面试 Handler机制 Binder机制

Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信

断了今生、忘了曾经 提交于 2020-11-19 02:51:37
背景 前面我们讲了很多 Flutter 相关的知识点,但是我们并没有介绍怎样实现 Flutter 与原生的通信。 比如我在 Flutter UI 上面点击了一个按钮,我希望原生做一些处理,那么原生怎么知道? 比如我在原生有些变化需要告知 Flutter,Flutter 又如何获知? 本篇我们先解决第一个问题。即 Flutter-> 原生的通信。 路由回顾 之前我们一直在讲 Flutter 相关的知识点,而且基本上都是在 main.dart 文件上面折腾,为了避免很多小伙伴觉得我们跨度过大。 因此我们这里补充一下之前第三篇 Flutter 即学即用系列博客——03 在旧有项目引入 Flutter 的知识点。 在 Flutter Module 的 main.dart 文件里面,对于存在多个页面的情况,我们可以写下面的模板代码: import 'dart:ui'; import 'package:flutter/material.dart'; void main() => runApp(_widgetForRoute(window.defaultRouteName)); Widget _widgetForRoute(String route) { switch (route) { case 'route1': return SomeWidget(...); case 'route2':

Flutter 即学即用系列博客——09 EventChannel 实现原生与 Flutter 通信(一)

 ̄綄美尐妖づ 提交于 2020-11-19 00:16:48
前言 紧接着上一篇,这一篇我们讲一下原生怎么给 Flutter 发信号,即原生-> Flutter 还是通过 Flutter 官网的 Example 来讲解。 案例 接着上一次,这一次我们让原生主动将电池的充电状态发送给 Flutter 并在界面显示。 步骤如下。 1. Flutter 界面修改 我们在原先基础上增加一列用于显示文本。 String _chargingStatus = 'Battery status: unknown.'; Text(_chargingStatus), 2. Flutter 定义 EventChannel 我们在 _BatteryWidgetState 里面加入下面变量: static const EventChannel eventChannel = EventChannel('samples.flutter.io/charging'); samples.flutter.io/charging 可以自己指定,一般保证唯一,所以 samples 实际使用可以替换为包名。主要是要跟原生对应即可。 3. Flutter 在 initState 实现 EventChannel 监听并实现对应回调方法 @override void initState() { super.initState(); eventChannel

跨平台技术演进及Flutter未来

扶醉桌前 提交于 2020-11-18 18:28:09
一、移动跨平台技术演进 1. 引言 移动互联网发展十余年,伴随着 Android、iOS 等智能手机的不断普及,移动端已逐步取代 PC 端,成为兵家必争之地。正所谓“得移动端者得天下”,移动端已成为互联网领域最大的流量分发入口,一大批互联网公司正是在这大趋势下崛起。 2. 为什么需要跨平台技术 伴随着移动互联网的高速发展,公司间竞争越来越激烈,如何将好想法快速落地、快速试错,成为备受关注的问题。提升研发效率、缩短研发周期,保障产品快速试错并能快速迭代新功能,让新产品新功能以最快的速度同时抵达 Android、iOS 等多端用户。 众所周知,Android 应用采用 Java 或 Kotlin 编写,iOS 应用采用 Objective-C 或 Swift 编写,Web 端采用 HTML /CSS/JavaScript 编写。当需要开发支持多端的应用,每一端都需要独立研发、测试,一直到上线,以及后续的维护工作,工作量成倍增涨,势必延长研发周期。 为了解决多端独立开发的问题,跨平台技术便应运而生,各大互联网公司为此都投入大量人力,于是出现了各种跨平台技术框架, 面对移动领域的跨平台技术方案的层出不穷,又该如何做技术选型呢? 3. 移动端技术选型 作为移动端的跨端技术方案,所关注无外乎以下这4个方面:研发效率、动态性、多端一致性、性能体验。 研发效率:最大化代码复用

Flutter-Android-Embedder启动流程

谁说胖子不能爱 提交于 2020-11-18 17:55:31
概述 Flutter的启动包括Embedder、Engine、Framework三部分,本文仅描述Android平台的Embdder模块的启动流程。Flutter通常通过启动一个FlutterActivity启动,纯Flutter App则通过FlutterApplication启动。本文以后一种情况为例分析。 FlutterApplication#onCreate // io/flutter/app/FlutterApplication.java @Override @CallSuper public void onCreate() { super.onCreate(); FlutterInjector.instance().flutterLoader().startInitialization(this); } 实际是调用 FlutterLoader#startInitialization 进行初始化。 FlutterLoader#startInitialization public void startInitialization(@NonNull Context applicationContext) { startInitialization(applicationContext, new Settings()); } public void