精华内容
下载资源
问答
  • 大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。 最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了… 所以...

    前言

    大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。

    最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了…

    所以啊,不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流~

    Android基础知识学习

    在掌握好JAVA基础知识后,
    接下来就是学习Android基础知识和如何查看开发文档了,
    在这个阶段我认为是学习最有劲头和最有收获的时候,
    因为从一无所知到了解是会让人有收获良多的感觉,
    事实上在这一阶段也是学习了很多,至少知道如何建立工程,
    知道一些基本的机制很常用函数的用法,

    这个阶段会出现很多的问题,
    往往一个很低级的问题都会把你难倒,
    而这阶段正式培养学习能力的好时机,

    还是那句话,凡是遇到问题第一个想的是自己去解决,
    自己解决不了的,用百度用谷歌,要学会使用搜索引擎,
    大部分的时候问题都能得到解决,
    因为你遇到过的问题别人早就遇到过了,
    假如搜索引擎也找不到好的答案,这时候可以到论坛发帖问,
    网上牛人很多,也可以选择到群里咨询

    Android开发进阶

    学习完Android基础知识以后,很多同学很快就会感觉到学习停步不前,
    感觉自己似懂非懂,我觉得这个时候是学习最关键的时候,
    因为一旦你踏出这一步之后,你对Android的理解就会跟更加透彻,
    做起开发也会更加有信心,

    但是怎样跨过这一阶段,
    我根据自己的经验是首先是保持对自己的信心,
    自己找一个比较简单的项目做做或者找一些应用的源代码研究研究,
    然后自己山寨出来一个,这样你也会有了学习的方向,
    因为你在了解了基础知识以后急切需要证明一下自己到底是学到了什么东西,
    而开发出一个自己的简单应用,就是最大的证明了,而且在开发应用的时候,
    肯定会遇到很多的问题,而在独立解决bug的同时,
    你已经掌握了独立处理问题的能力。

    最后

    总之啊,家里没矿的同学们,如果你们想以后的日子过得好一些,多想想你们的业余时间怎么安排吧;

    技术方面的提升肯定是重中之重,但是技术外的一些“软实力”也不能完全忽视,很多时候升职确实是因为你的技术足够强,但也与你的“软实力”密切相关

    在这我也分享一份大佬自己收录整理的 Android学习PDF+架构视频+面试文档+源码笔记 ,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅并给下属员工学习的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

    总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

    如果你有需要的话,可以点击获取

    Tv2BmP-1621871849977)]

    [外链图片转存中…(img-LQgMM2dz-1621871849979)]

    相信自己,没有做不到的,只有想不到的

    展开全文
  • 这里写链接内容实际开发过程中构建我们项目框架时为了用户体验好和个性化往往需要手势返回的功能,虽然ios7以后的系统支持这个但是系统有些不足如:支持手势返回需要ios7.0以上系统,手势非要从左边缘开始拉,触摸...

    这里写链接内容在实际开发过程中构建我们项目框架时为了用户体验好和个性化往往需要手势返回的功能,虽然ios7以后的系统支持这个但是系统有些不足如:支持手势返回需要ios7.0以上系统,手势非要从左边缘开始拉,触摸拉开效果不能自定义,然而我们今天就给大家开发一款支持手势返回没有系统要求(ios5.0以上),从哪里可以触摸返回可以自定义的一个导航框架。
    我这个是以淘宝app的导航框架为例开发。
    WHC_NavigationController.h头文件如下:

    //
    //  WHC_NavigationController.h
    //  WHC_NavigationController
    //
    //  Created by 吴海超 on 15/4/13.
    //  Copyright (c) 2015年 吴海超. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    #define KWHC_Nav_Main_VC_Name (@"MyTabBarVC")     //主控制器类名
    #define KWHC_Nav_Touch_Back_Rate (0.4)            //触摸拖拽可以返回条件比例
    #define KWHC_Nav_Pop_Form_Border (-1)             //note > 0 from border pull < 0 any where pull diatancex > 30
    @interface WHC_NavigationController : UINavigationController
    
    //单例默认用KWHC_Nav_Main_VC_Name作为主控制器
    + (instancetype)sharedInstance;
    
    //单例自定义主控制器
    + (instancetype)sharedInstanceWithMainVC:(UIViewController*)mainVC;
    @end
    

    WHC_NavigationController.m源文件如下:

    //
    //  WHC_NavigationController.m
    //  SideMenu
    //
    //  Created by 吴海超 on 15/4/13.
    //  Copyright (c) 2015年 吴海超. All rights reserved.
    //
    
    #import "WHC_NavigationController.h"
    #define KWHC_NAV_LEFT_VIEW_TAG (203994850)                         //左边view的tag
    #define KWHC_NAV_LEFT_PUSH_VIEW_TAG (KWHC_NAV_LEFT_VIEW_TAG + 1)   //左边pushView的tag
    #define KWHC_NAV_NAVBAR_TAG (KWHC_NAV_LEFT_VIEW_TAG + 2)           //导航条的tag
    #define KWHC_NAV_ANIMATION_DURING (0.3)                            //pop或者push动画周期
    #define KWHC_NAV_POP_VIEW_CENTERX_OFFSET (0)                       //popView中心x轴偏移 (禁止修改值)
    #define KWHC_NAV_PUSH_VIEW_CENTERX_OFFSET (0)                      //pushView中心x偏移  (禁止修改值)
    #define KWHC_NAV_POP_VIEW_ALPHA (0.5)                              //popview透明系数
    #define KWHC_NAV_ALLOW_PULL_DISTANCE (30.0)                        //可以拉开允许的距离
    @interface WHC_NavigationController ()<UINavigationControllerDelegate>{
        UIPanGestureRecognizer           *   _panGesture;              //手势
        CGFloat                              _currentTx;               //存储当前触摸x值
    
        NSMutableArray                   *   _snapshootList;           //快照数组
        UIView                           *   _popView;                 //弹出view
        UIView                           *   _pushView;                //压站view
        UIView                           *   _topView;                 //顶部视图
        BOOL                                 _willOpen;                //是否将要拉开
        BOOL                                 _didOpen;                 //是否已经拉开
        BOOL                                 _isTouchPop;              //是否触摸弹出
    }
    
    @end
    
    static WHC_NavigationController * whc_navigation;
    
    @implementation WHC_NavigationController
    
    //单例实现
    + (instancetype)sharedInstance{
        UIViewController  * rootVC = [[NSClassFromString(KWHC_Nav_Main_VC_Name) alloc]init];
        //        UIViewController  * rootVC = [[NSClassFromString(KWHC_Side_Menu_N_Main_VC_Name) alloc]initWithNibName:KWHC_Nav_Main_VC_Name bundle:nil];
        return [WHC_NavigationController sharedInstanceWithMainVC:rootVC];
    }
    
    + (instancetype)sharedInstanceWithMainVC:(UIViewController*)mainVC{
        static dispatch_once_t predicate;
        dispatch_once(&predicate, ^{
            whc_navigation = [[WHC_NavigationController alloc]initWithRootViewController:mainVC];
            whc_navigation.delegate = whc_navigation;
        });
        return whc_navigation;
    }
    #pragma mark - initMothed
    
    //重载父类初始化方法
    - (instancetype)initWithRootViewController:(UIViewController *)rootViewController{
        self = [super initWithRootViewController:rootViewController];
        if(self){
            [self registPanGesture:YES];
        }
        return self;
    }
    
    - (instancetype)initWithCoder:(NSCoder *)aDecoder{
        self = [super initWithCoder:aDecoder];
        if(self != nil){
            [self registPanGesture:YES];
        }
        return self;
    }
    
    - (instancetype)init{
        self = [super init];
        if(self != nil){
            [self registPanGesture:YES];
        }
        return self;
    }
    
    - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if(self){
            [self registPanGesture:YES];
        }
        return self;
    }
    #pragma mark - gestureMothed
    //注册手势事件
    - (void)registPanGesture:(BOOL)b{
        self.interactivePopGestureRecognizer.enabled = NO;
        if(b){
            if(_panGesture == nil){
                _panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanGesture:)];
                [_panGesture delaysTouchesBegan];
                [self.view addGestureRecognizer:_panGesture];
            }
        }else{
            if(_panGesture != nil){
                [self.view removeGestureRecognizer:_panGesture];
                _panGesture = nil;
            }
        }
    }
    
    #pragma mark - handleGesture
    - (void)handlePanGesture:(UIPanGestureRecognizer*)panGesture{
    
        switch (panGesture.state) {
            case UIGestureRecognizerStateBegan:{
                _currentTx = self.view.transform.tx;
            }
                break;
            case UIGestureRecognizerStateChanged:{
                CGFloat  moveDistance = [panGesture translationInView:panGesture.view].x;
                if(!_willOpen){
                    if(KWHC_Nav_Pop_Form_Border < (0)){
                        if(moveDistance < KWHC_NAV_ALLOW_PULL_DISTANCE){
                            return;
                        }
                    }else{
                        CGFloat touchX = [panGesture locationInView:panGesture.view].x;
                        if(touchX > KWHC_Nav_Pop_Form_Border){
                            return;
                        }
                    }
                }
                CGFloat  oriX = [panGesture velocityInView:panGesture.view].x;
                CGFloat  rate = moveDistance / CGRectGetWidth(self.view.frame);
                if(oriX > 0){//open door
                    [self popView];
                    if(!_willOpen && _popView != nil){
    
                        UIView * oldPopView = [self.view.superview viewWithTag:KWHC_NAV_LEFT_VIEW_TAG];
                        if(oldPopView){
                            [oldPopView removeFromSuperview];
                        }
                        [self.view.superview insertSubview:_popView belowSubview:self.view];
                        _willOpen = YES;
    
                    }
                    if(_willOpen && moveDistance >= 0.0){
    
                        self.view.transform = [self initAffineTransform:moveDistance + _currentTx];
                        _popView.center = CGPointMake(KWHC_NAV_POP_VIEW_CENTERX_OFFSET + rate * CGRectGetWidth(_popView.frame) / 2.0, _popView.center.y);
                        _popView.alpha = KWHC_NAV_POP_VIEW_ALPHA * (rate + 1.0);
    
                    }
    
                }else if(oriX < 0 && _willOpen && moveDistance >= 0.0){//close door
    
                    self.view.transform = [self initAffineTransform:moveDistance + _currentTx];
                    _popView.center = CGPointMake(KWHC_NAV_POP_VIEW_CENTERX_OFFSET + rate * CGRectGetWidth(_popView.frame) / 2.0, _popView.center.y);
                    _popView.alpha = KWHC_NAV_POP_VIEW_ALPHA * (rate + 1.0);
    
                }else if(_willOpen){
    
                    if(moveDistance < 0.0 && self.view.transform.tx > 0){
                        self.view.transform = [self initAffineTransform:0.0];
                        _popView.center = CGPointMake(KWHC_NAV_POP_VIEW_CENTERX_OFFSET, _popView.center.y);
                        _popView.alpha = KWHC_NAV_POP_VIEW_ALPHA;
                    }
                }
            }
                break;
            case UIGestureRecognizerStateCancelled:
            case UIGestureRecognizerStateEnded:{
                if(_willOpen){
                    if(self.view.transform.tx / CGRectGetWidth(self.view.frame) < KWHC_Nav_Touch_Back_Rate){
                        [self closeLeftView:YES];
                    }else{
                        [self closeLeftView:NO];
                    }
                }
            }
                break;
            default:
                break;
        }
    }
    
    //偏移变换
    - (CGAffineTransform)initAffineTransform:(CGFloat)x{
        return  CGAffineTransformMakeTranslation(x, 0.0);
    }
    
    //对当前控制器进行快照
    - (UIImage*)snapshootNavBar:(UIViewController*)vc{
    
        UIGraphicsBeginImageContextWithOptions(self.view.frame.size, self.view.opaque, 0.0);
        [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage  * snapshootImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return snapshootImage;
    }
    
    //获取要弹出view的快照view
    - (UIView*)popView{
        if(_snapshootList != nil && _snapshootList.count > 1){
            _popView = [_snapshootList lastObject];
            _popView.center = CGPointMake(KWHC_NAV_POP_VIEW_CENTERX_OFFSET, _popView.center.y);
            _popView.alpha = KWHC_NAV_POP_VIEW_ALPHA;
        }else{
            _popView = nil;
        }
        return _popView;
    }
    
    //获取已经push的快照view
    - (UIView*)pushView{
        if(_snapshootList != nil && _snapshootList.count > 0){
            _pushView = [_snapshootList lastObject];
            _pushView.center = CGPointMake(KWHC_NAV_PUSH_VIEW_CENTERX_OFFSET, _pushView.center.y);
            _pushView.alpha = 1.0;
        }else{
            _pushView = nil;
        }
        return _pushView;
    }
    
    //pop或者取消pop操作
    - (void)closeLeftView:(BOOL)isClose{
        [self registPanGesture:NO];
        _willOpen = NO;
        UIView * mainView = self.view;
        __weak  typeof(self) sf = self;
        if(isClose){
            [UIView animateWithDuration:KWHC_NAV_ANIMATION_DURING delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
                _popView.center = CGPointMake(KWHC_NAV_POP_VIEW_CENTERX_OFFSET, _popView.center.y);
                _popView.alpha = KWHC_NAV_POP_VIEW_ALPHA;
                mainView.transform = [sf initAffineTransform:0.0];
            } completion:^(BOOL finished) {
                [sf registPanGesture:YES];
                [_popView  removeFromSuperview];
                _popView = nil;
            }];
        }else{//pop opeartion
            [UIView animateWithDuration:KWHC_NAV_ANIMATION_DURING delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
                mainView.transform = [sf initAffineTransform:CGRectGetWidth(mainView.frame)];
                _popView.center = CGPointMake(CGRectGetWidth(_popView.frame) / 2.0, _popView.center.y);
                _popView.alpha = 1.0;
            } completion:^(BOOL finished) {
                [sf registPanGesture:YES];
                _isTouchPop = YES;
                mainView.transform = [sf initAffineTransform:0];
                [sf popViewControllerAnimated:NO];
            }];
        }
    }
    
    #pragma mark - viewLoad
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    //重载父类push方法
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
        if(_snapshootList == nil){
            _snapshootList = [NSMutableArray array];
        }
        [_snapshootList addObject:[[UIImageView alloc]initWithImage:[self snapshootNavBar:viewController]]];
        [self pushView];
        //忽略第一次push操作
        if(_pushView && animated && _snapshootList != nil){
    
            __weak  typeof(self) sf = self;
            //防止重复push
            _topView = self.topViewController.view;
            _topView.userInteractionEnabled = NO;
            [super pushViewController:viewController animated:NO];
            self.view.transform = [self initAffineTransform:CGRectGetWidth(self.view.frame)];
            UIView * oldPushView = [self.view.superview viewWithTag:KWHC_NAV_LEFT_PUSH_VIEW_TAG];
            if(oldPushView){
                [oldPushView removeFromSuperview];
                oldPushView = nil;
            }
            _pushView.center = CGPointMake(CGRectGetWidth(_pushView.frame) / 2.0, _pushView.center.y);
            [self.view.superview insertSubview:_pushView belowSubview:self.view];
            [UIView animateWithDuration:KWHC_NAV_ANIMATION_DURING delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
                _pushView.center = CGPointMake(-CGRectGetWidth(_pushView.frame) / 2.0, _pushView.center.y);
                _pushView.alpha = KWHC_NAV_POP_VIEW_ALPHA;
                sf.view.transform = [sf initAffineTransform:0];
            } completion:^(BOOL finished) {
                [_pushView removeFromSuperview];
                _pushView = nil;
            }];
    
        }else{
    
            [super pushViewController:viewController animated:animated];
        }
    }
    
    //重写父类pop方法
    - (UIViewController *)popViewControllerAnimated:(BOOL)animated{
        UIViewController  * viewController = nil;
        if(!_isTouchPop){
            //不是触摸弹出操作
            __weak  typeof(self) sf = self;
            __block UIView  * popView = [[UIImageView alloc]initWithImage:[self snapshootNavBar:nil]];
            viewController = [super popViewControllerAnimated:NO];
            if(popView){
                self.view.transform = [self initAffineTransform:-CGRectGetWidth(self.view.frame)];
                self.view.alpha = KWHC_NAV_POP_VIEW_ALPHA;
                UIView  * oldPopView = [self.view.superview viewWithTag:KWHC_NAV_LEFT_VIEW_TAG];
                if(oldPopView){
                    [oldPopView removeFromSuperview];
                    oldPopView = nil;
                }
                popView.center = CGPointMake(CGRectGetWidth(popView.frame) / 2.0, popView.center.y);
                [self.view.superview insertSubview:popView belowSubview:self.view];
                [UIView animateWithDuration:KWHC_NAV_ANIMATION_DURING delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
                    popView.center = CGPointMake(CGRectGetWidth(popView.frame) * 1.5, popView.center.y);
                    sf.view.transform = [sf initAffineTransform:0];
                    sf.view.alpha = 1.0;
                } completion:^(BOOL finished) {
                    [popView removeFromSuperview];
                    popView = nil;
                    [_snapshootList removeLastObject];
                }];
            }
        }else{
            //清除popview的快照存储
            [_snapshootList removeLastObject];
            [_popView removeFromSuperview];
            _popView = nil;
            viewController = [super popViewControllerAnimated:animated];
        }
        _isTouchPop = NO;
        return viewController;
    }
    
    #pragma mark - UINavigationControllerDelegate
    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
        }
    - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
        if(_topView != nil){
            _topView.userInteractionEnabled = YES;
        }
    }
    
    @end
    

    运行效果如图
    WHC_NavigationControllerDemo下载

    展开全文
  • 一、最近在学习node的时候,发现经常会启动报错,但只要修改了监听的端口之后就...查找端口在哪里写了,然后修改端口     二、运行cnpm install的时候报错optional install error: Package require os(darwin)...

    一、最近在学习node的时候,发现经常会启动报错,但只要修改了监听的端口之后就恢复正常,报错为listen EADDRINUSE :::8000。如下:

    执行npm run dev时报错

    解决方法:

    查找端口在哪里写了,然后修改端口

     

     

    二、运行cnpm install的时候报错optional install error: Package require os(darwin) not compatible with your platform(win32),如下:

    解决方法:

     

    虽然提示不适合Windows,但是问题好像是sass loader出问题的。所以只要执行下面命令即可;

    方案一:

    cnpm rebuild node-sass
    #不放心可以重新安装下
    cnpm install
    
    

    方案二:

    npm update
    npm install
    nodejs node_modules/node-sass/scripts/install.js
    npm rebuild node-sass
     

    一般只要执行方案一就够了。
    然后再运行,OK。

     

    三、执行npm install vue-ydui --save 时报错“npm WARN checkPermissions Missing write access to E:\jingjing\vux-template\node_modules\cliui\node_modules\wordwrap”

    解决方法:

    使用淘宝镜像安装,例如,使用cnpm install vue-ydui --save

     

    四、执行npm run dev时报错“var content = require("!!../../vue-style-loader/index.js!../../css-loader/index.js??ref--7-1!../../postcss-loader/lib/index.js??ref--7-2!./ydui.rem.css");”如下

    解决方法:在webpack.base.conf.js里面的这个位置添加include,include: [] 这里用一个数组来包括的要解析的文件夹路径,如下图

    解释:

    include:是代表我们解析的文件只包含那些东西 
    include: [] 这里用一个数组来包括的要解析的文件夹路径

    格式一般是:

    哪怕include: []为空,都行。

    这次问题参考链接:https://blog.csdn.net/z852064121/article/details/72660327

     

     

    展开全文
  • 大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。 最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了… 所以...

    前言

    大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。

    最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了…

    所以啊,不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流~

    一、关于Handler面试那些问题

    1、Handler Looper Message 关系是什么?
    2、Messagequeue 的数据结构是什么?为什么要用这个数 据结构?
    3、如何在子线程中创建 Handler?
    4、Handler post 方法原理?
    5、Android 消息机制的原理及源码解析
    6、Android Handler 消息机制
    7、Android 消息机制

    二、关于Activity面试那些问题

    1、启动模式以及使用场景?
    2、onNewIntent()和 onConfigurationChanged()
    3、onSaveInstanceState()和 onRestoreInstanceState()
    4、Activity 到底是如何启动的

    三、关于Fragment面试那些问题

    1、Fragment 生命周期和 Activity 对比
    2、Fragment 之间如何进行通信
    3、Fragment 的 startActivityForResult
    4、Fragment 重叠问题
    5、Fragment 重叠, 如何通信

    四、关于Service面试那些问题

    1、进程保活
    2、Service 的运行线程(生命周期方法全部在主线程)
    3、Service 启动方式以及如何停止
    4、ServiceConnection 里面的回调方法运行在哪个线程?
    5、startService 和 bingService 区别
    6、Android 进程保活的一般套路

    五、关于Android 布局优化面试那些问题

    1、什么情况下使用 ViewStub、include、merge?
    2、他们的原理是什么?
    3、布局优化神器 include 、merge、ViewStub 标签详解
    4、Android 布局优化之 ViewStub、include、merge 使用 与源码分析

    六、关于BroadcastReceiver面试那些问题

    1、注册方式,优先级
    2、广播类型,区别
    3、广播的使用场景,原理
    4、安卓广播的底层实现原理

    七、关于AsyncTask面试那些问题

    1、AsyncTask 是串行还是并行执行?
    2、AsyncTask 随着安卓版本的变迁

    八、关于Android 事件分发机制面试那些问题

    1、onTouch 和 onTouchEvent 区别,调用顺序
    2、dispatchTouchEvent , onTouchEvent , onInterceptTouchEvent 方法顺序以及使用场景
    3、滑动冲突,如何解决
    4、Android ViewGroup 事件分发机制

    九、关于Android View 绘制流程面试那些问题

    1、简述 View 绘制流程
    2、onMeasure, onlayout, ondraw 方法中需要注意的点
    3、如何进行自定义 View
    4、view 重绘机制

    十、关于Android ANR面试那些问题

    1、为什么会发生 ANR?
    2、如何定位 ANR?
    3、如何避免 ANR?
    4、什么是 ANR

    十一、关于Android 内存面试那些问题

    1、什么情况下会内存泄漏?
    2、如何防止内存泄漏?

    Android高级架构师

    由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记做整理一份资料。

    需要的朋友可以**私信【学习】**我分享给你,希望里面的资料可以给你们一个更好的学习参考。

    或者直接点击下面链接免费获取

    Android学习PDF+架构视频+面试文档+源码笔记

    • 330页PDF Android学习核心笔记(内含上面8大板块)

    • Android学习的系统对应视频

    • Android进阶的系统对应学习资料

    • Android BAT部分大厂面试题(有解析)

    好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。

    238546)]

    • Android BAT部分大厂面试题(有解析)

    [外链图片转存中…(img-4Rzz1q07-1619498238547)]

    好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。

    展开全文
  • 将固有的计算偏差与不公平或错误偏差的无端影响区分开来,同时梳理它们在哪里相遇以及它们如何相互作用是至关重要的。 这包括基于 ML 应用程序正在重新配置我们在线和离线环境的“选择架构”这一事实,对 ML 偏见的...
  • jfinal-admin 后台框架永久开源

    千次阅读 2017-12-20 09:51:43
     jfinal-admin是一个基于jfinal的后台管理开发框架,能帮助你使用很少的时间和代码量开发出功能完备的管理后台。最新代码请切换到 develop 分支 ,组织机构管理,用户管理,角色管理,菜单管理,权限管理,数据...
  • MFC框架的DES文件加密机

    千次阅读 2018-06-26 15:46:34
    1.选择 项目 属性,字符集哪里选择使用多字节字符,不要用UNICODE字符 2.项目Windows 10 + VS2017 + X64 +Release下编译测试通过,非X64版本部分API接口可能不一样 3.肯定有BUG,后续有机会就修,暂时没发现...
  • :如果填写了真,那么在循环里面会加个"处理事件()"的命令来让消息循环 去队列处理窗口组件操作 防止执行的时候窗口卡死,(记得在哪里看到过线程中处理事件()是没有效果的。不太懂~~) 1. 置_初始栈大小()  设置初始...
  • InAppSettingsKit InAppSettingsKit(IASK)是一个开放源代码解决方案,可轻松将应用程序内设置添加到您的iPhone应用程序...因此,用户可以选择在哪里更改设置。 IASK不仅复制系统设置的功能,而且支持大量的添加程序
  • 因此,用户可以选择在哪里更改设置。 IASK不仅复制系统设置的功能,而且支持大量其他元素和配置选项。 从IASK 2.x更新? 请阅读。 它是如何工作的? 为了支持传统的Settings.app窗格,该应用程序必须包括一个...
  • 自己的数据是用labelme标注后使用labelme自带的labelme2coco转换成coco格式数据,标注了三类数据(不含背景),修改了mask_reader.yml中的data_dir,和drop_last,修改了mask...
  • 面试开火箭,工作拧螺丝…月初有个朋友面试拼多多,一面自信满满过了,结果三面却惨败…昨天朋友约我出来讨论问题在哪里,三面就答不上了(卡壳很严重呐)。听完整个面试经历之后,我总结了一下,这次拼多多一二三面...
  • 我们为MER提供了一个以用户为中心的新概念化框架,强调了未来的研究人员应将重点放在哪里:(1)开放数据和实验可再现性;(2)概念和注释的固有主观性;(3)模型的可解释性和可解释性;(4)文化和背景相关性,...
  • 面试开火箭,工作拧螺丝…月初有个朋友面试拼多多,一面自信满满过了,结果三面却惨败…昨天朋友约我出来讨论问题在哪里,三面就答不上了(卡壳很严重呐)。听完整个面试经历之后,我总结了一下,这次拼多多一二三面...
  • Spark是时下很火的计算框架,由UC Berkeley AMP Lab研发,并由原班人马创建的Databricks负责商业化...人人都说Spark/SparkSQL快,各种Benchmark满天飞,但是到底Spark/SparkSQL快么,或者快在哪里,似乎很少有人说得...
  • 对其进行基准测试,并了解精简操作的瓶颈在哪里,尤其是对于小投入而言。 例子 只是我的目标的草图。 除了可以绕过程序/类型签名步骤之外,用法与cwise基本相同。 var tensorOp = require ( 'ndarray-tensor-op' ...
  • 集成学习task-2 stacking

    2021-05-13 21:46:38
    基于前面对Blending集成学习算法的讨论,我们知道:Blending集成的过程中只会用到验证的数 据,对数据实际上是一个很大的浪费。为了解决这个问题,我们详细分析下Blending到底哪里出现问题 并如何改进。...
  • 首先从全自动和半自动开始说起,网上经常有人说MyBatis和Hibernate一个半自动的ORM映射框架,一个是半自动的ORM框架、那么究竟体现在哪里 一切还要从JDBC说起,我们通常知道JDBC的实现步骤包括获取连接,创建...
  • 该库使您可以将Cassandra表公开为Spark RDD和数据/数据框架,将Spark RDD和数据/数据框架写入Cassandra表,并Spark应用程序中执行任意CQL查询。 与Apache Cassandra 2.1或更高版本兼容(请参见下表) 与...
  • 相关阅读:雷军说马云骗子、柳传志弃投百度、王兴骂滴滴垃圾…14位大佬悔不当初腾讯开发微信花了多少钱?真的技术难度这么大吗?难点在哪里?互联网技术(java框架、分布式、...
  • 相关阅读:雷军说马云骗子、柳传志弃投百度、王兴骂滴滴垃圾…14位大佬悔不当初腾讯开发微信花了多少钱?真的技术难度这么大吗?难点在哪里?互联网技术(java框架、分布式、...
  • 封装定制自己的Kali-Linux ISO Kali Linux ISO简介 构建自定义的Kali ISO既简单,有趣又有意义。您几乎可以使用Debian动态构建脚本来配置...您应该在哪里建立ISO? 最理想的是在预装Kali的环境里定制你的Kali ISO.
  • Darknet与YOLO生死恋

    千次阅读 2019-05-15 17:28:24
    2、图像标注:比如标注出图像中有几个对象,位置在哪里; 3、训练模型:选择一个模型,利用框架进行微调训练或者从头训练; 4、模型推理:将模型发布成服务之类,在实际中使用。 Darknet是用C和CUDA编写的开源神经...
  • mybatis常见面试题汇总

    2021-03-25 10:53:33
    1.什么是Mybatis? Mybatis是一款持久层框架,半ORM框架.支持定制化sql,存储过程以及高级映射.避免了JDBC代码和手动设置参数和获取结果,...它与全自动的区别在哪里? mybatis在查询关联对象或关联集合对象...
  • 过去几年中,神经网络已经看到壮观进展,并且他们现在是...你可能会困惑:最高性能的深度学习实现是单节点的当下, Spark 的用处在哪里?为了回答这个问题,我们将会演示两个例子并解释如何使用 Spark 和机器...
  • 2020-04-12

    2020-04-12 12:06:54
    最近做一个基于tensorflow框架的图像分类器,使用了VGG19网络以及cifar-10数据作训练和验证,并且最后训练准确率达到95,验证达到90左右。但是加载训练好的模型作预测时,对于不同的图片输入预测结果均为cat,...
  • 一、废话.net学java为何一直没入坑?其实大家都知道,语法很相似,就是使用的习惯不同稍微的语法差异结构体系不同IDE不同类库不同...不同在哪里?Console.WriteLine(“Hello World”); –> System.out.print...
  • 霸屏天下源码java 数据科学资源 “'数据!数据!数据!' 他不耐烦地哭了起来。“没有粘土,我做不了砖。”——福尔摩斯, ...的开源框架,实现了大量用于医学成像的加载器、预处理器和数据) 视频
  • 介绍 这是一项巨大的蒸蒸工作。 我正在使用的Jax,jaxlib和NN库每周...我们在哪里: 培训针对单节点,多GPU和TPU v3-8(适用于基于Tensorflow数据的管线)的亚麻亚麻变体 模型的Objax和Flax Linen(nn.compact)变体

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

框架集在哪里