高级工程师_高级工程师月收入多少 - CSDN
精华内容
参与话题
  • 高级工程师面试题

    2019-03-08 18:41:52
    高级工程师面试题 1、 Service两种方式的区别 2、 Handler在项目怎么用的,线程间如何通信的 3、 AsyncTask和AsyncQueryHandler 4、 HttpClient,HttpUrlConnection的区别 5、 消息推送机制xmpp协议,客户端发...

    转自:https://blog.csdn.net/fishmai/article/details/51981827

    高级工程师面试题

    1、 Service两种方式的区别
    2、 Handler在项目怎么用的,线程间如何通信的
    3、 AsyncTask和AsyncQueryHandler
    4、 HttpClient,HttpUrlConnection的区别
    5、 消息推送机制xmpp协议,客户端发送服务器好处理,只要知道服务器IP就可以,服务器如何给客户端推送消息呢
    6、 oauth认证
    7、 HTML和XML的区别、
    8、 多线程断点续传下载如何实现续传的
    9、 TCP、UDP的区别
    10、 aidl开发
    11、 Android中JNI和NDK的使用,了解WebService调用技术
    12、 Android安全机制,垃圾回收机制
    14、 屏幕适配
    15、 android ui的几个概念:px,dip(dp),sp,dpi,分辨率等,dpi是在Android资源随着不同手机的分辨率自动进行适配,res-》drawable-hdpi
    16、 Launcher如何设置壁纸
    17、 baiduMap如何用,用百度地图的坐标为甚么显示pc会出现很大的偏差,如何避免呢?
    18、 哪个项目是你印象最深

     

    1.为了降低android程序的内存使用峰值和APK文件的大小,我们一般使用_____________工具对资源图进行额外处理。


    2.Android系统会自动派发各种事件,事件从触发到相应的程序相应的派发顺序是_________。

    3.发布Android程序时,APK文件要先签名,再用Zipalign做4字节对齐。( )

    4.实现多个进程共享数据的时候,只要设置AndroidManifest文件的shareUserId属性即可,签名可以不一致( )。


    5.在JNI的实现代码中,如果要实现跨线程调用JNI接口,我们需要先调用jni.h中的_________函数,跨线程调用JNI接口完毕后,再调用jni.h中的____________________函数来善后。


    6.如果一个Activity被设置为“singleTop”模式并且还驻留在后台,此时再通过startActivity启动这个Activity时,Activity的_______________成员函数会被最先回调到,我们一般在这个回调函数中来处理相关逻辑。


    PS:3、4题是判断题,其它是填空题

     

    ********************************************************

     

    个人稍微回答下。可能有很多不足之处,仅作借鉴

     

    问题1

    为了降低android程序的内存使用峰值和APK文件的大小,我们一般使用_____________工具对资源图进行额外处理。

      答:这个估计一般人都知道了,就是9图工具。而且这个工具真的很好用,就我几个阶段反编译一些apk文件来看。比如一年前的时候的应用,基本没有用到这块,除了几个大型公司做的app,用到了工具。2011年末的几个应用,9妹就来势汹汹了。而且发现9图后图片除了能更好的适配防拉伸效果等,还微微减小了图片大小。同时因为能做多适配和大小缩放不失真的调整,间接的就减少了做多套适配图片而增减资源包的臃肿。

     

    问题2:

    Android系统会自动派发各种事件,事件从触发到相应的程序相应的派发顺序是_________。

      答:这个涉及到Framework层了。本人没怎么接触。看关于这个帖子的这个题有人给出过两种答案:

      1.EventHub->KeyInputQueue->WindowManagerService->ViewRoot->...

      2.WindowsManager->phoneWiondw->Activity

     

      其实两个想表达的意思是差不多的。就是一个服务队列,接受到事件。从队列中将该事件分发给WindowManagerService也就是窗口管理类服务,然后分发个对应的窗口Window,窗口中有个主View,主View又分由上而下子View。这里就要提到两个函数,也是刚开始我搞晕了的两个函数:第一个是dispatchXXXXEvent和onXXXX(onTouchEvent,onKeyDown);以前对这个onxxxx的重写时很多的,这个dispatchXXX基本是没用过。然后我一直也没明白这个派发机制的干嘛的。后来看下了源代码会发现,dispatch分发传递到最后一层时,就执行了onxx事件。说白了就是dispatch是发送事件,onxx是处理事件。

    1.   public boolean dispatchTouchEvent(MotionEvent event) {
    2.         if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&
    3.                 mOnTouchListener.onTouch(this, event)) {
    4.             return true;
    5.         }
    6.         return onTouchEvent(event);
    7.     }

    复制代码

      这是View中的一段代码。

     

      具体关于分发事件的可以查考该博文:Android FrameWork——Touch事件派发过程详解。不太明白的也没事。可以看个大致流程,呵呵。

     

    问题3:

    发布Android程序时,APK文件要先签名,再用Zipalign做4字节对齐。( )

      答:这个是判断题,无论你知不知道,好歹还能蒙一个。先说下答案,对的。以我的了解。这题出的其实比较偏门,偏门的意思是大部分人都不会关心这个。我也是在最近弄Ant自动打包时,才是熟悉了下这个问题。因为ant脚本这玩意我也是第一次玩,看了下资料,以及基本语法和书写方式。一般我们打包可能直接用adt工具了,说白了它就是集成了一个打包工具。ant只不过就是我们自己来写而已,里面涉及到很多javac,zipalign和proguard什么的,就是把一些工具的命令行操作语句窜起来。然后接触到要使用一个zipalign优化工具简答了解下:这是一个归档对其工具,对资源做了优化,对未压缩的数据做了某种意义上的4字节对其。

      具体为什么这个顺序是对的呢。不知道这图算不算一种说明方式:

     

     

     

      这是我打完一个未签名包后,工具的提示。

      对于为什么出这样的题,估计是是想看应聘者是否去接触过一些细节和工具,或是对于ant打包的接触?

     

    问题4:

    实现多个进程共享数据的时候,只要设置AndroidManifest文件的shareUserId属性即可,签名可以不一致( )。

      答:/***是。具体原因就不知了。**/

      这里先谢谢下面评论中那个哥们,确实对于我可能测试过的几个问题我都做了详细回答。这个因为没有测试,就完全是copy了那会论坛下的几个答案,以为做个总体答案的记录就行了。这是刚测试后的答案。答;不能。因为设置了shareUserId后,在你应用安装的时候系统在对读取配置文件安装信息时就会检测这个问题,既你的A应用和B应用实现了shareUserId一样。

    但是在安装时签名不一样的话,安装过程就是失败的。

     

     

    问题5:

    在JNI的实现代码中,如果要实现跨线程调用JNI接口,我们需要先调用jni.h中的_________函数,跨线程调用JNI接口完毕后,再调用jni.h中的_____函数来善后。

      答案:/****   网上查了一下,第五题应该是GetJavaVM, DestroyJavaVM() .copy来的答案。。也不是很懂。****/

      答:这个问题原来只是copy过来的一份答案。谢谢 Innost 前辈对错误指出。涉及到底层的,有很多不足,首先也说下做这块总结只要是想把这几个问题有个还算靠谱的答案,因为现在google或是百度下这几个问题,都只是给出了题目,下面有回答和讨论的。我这边只是想做个简单归档,可能有很多不足,希望指正或是给下更好的答案。上班抽闲大致花了1-2小时看了下这方面的资料。因为本人对C这块不熟,看的其实有点吃力。JavaVM和JavaEnv的概念。

      (因为答案基本围绕了这两个在讨论, Innost 也提到说看下这个概念)。JavaVM即java虚拟机,主要是一个进程(也就是多个线程来访问),简单说就是在一个应用进程启动后背创建。JavaEnv,虚拟机环境,这个是只能被他创建的线程来访问,里面持有该线程访问的数据。利用jvm可以获取当前线程的env。然后通过两个函数,来实现环境依附跨线程的访问和访问完后的释放。

    1. [java] view plaincopy
    2.  
    3. jint AttachCurrentThread(void **penv, void *args) {
    4.        return functions->AttachCurrentThread(this, penv, args);
    5.    }
    6.  

    复制代码

    1. [java] view plaincopy
    2.  
    3.  
    4.  
    5. jint DetachCurrentThread() {
    6.        return functions->DetachCurrentThread(this);
    7.    }
    8.  

    复制代码

      这两个函数定义可以在jni.h中找到。

     

      这边其实有考虑到两个参数 _jvm和_env.因为看下上面的代码是通过jvm调用 AttachCurrentThread来获取_env,那_jvm这个参数又是何时获取,怎么获取的。

    这个是网上copy的一份解说:

    /----------------------------------------------------

    JavaVM接口

    第一种方式,在加载动态链接库的时候,JVM会调用JNI_OnLoad(JavaVM* jvm, void* reserved)(如果定义了该函数)。第一个参数会传入JavaVM指针。

    第二种方式,在native code中调用JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args)可以得到JavaVM指针。
    两种情况下,都可以用全局变量,比如JavaVM* g_jvm来保存获得的指针以便在任意上下文中使用。
    Android系统是利用第二种方式Invocation interface来创建JVM的。

    JNIEnv接口
    JNI开发最常见的错误就是滥用了JNIEnv接口。需要强调的是JNIEnv是跟线程相关的。
    在native method中,JNIEnv作为第一个参数传入。那么在JNIEnv不作为参数传入的时候,该如何获得它?JNI提供了两个函数:(*jvm)->AttachCurrentThread(jvm, (void**)&env, NULL)和(*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_2)。两个函数都利用JavaVM接口获得JNIEnv接口。

    ----------------------------------------------------/

    其实这块挺晕的:

    看jni.h中对于jvm好env获取是这样的定义。

    env->GetJavaVM(&g_vm);

    jvm->AttachCurrentThread(&e, &thread_args);

    就是通过env获取虚拟机,通过虚拟机获取env。。。。有点先有蛋还是鸡的味道。

    对于Android调用了jni几块,比如mediaPlayer模块。我看下了,发现env这个都是自己传进去。

    其实还是很不懂。

    只是先把这个错误答案改过来。

    其实对于上面这个先调用获取jvm理论上也是对的,获取jvm后在获取env。对于后面这个空说销毁jvm可能就不对了。

    本题的中心可能主要还是围绕env这个来说事。

    更多详情可以看下下面老兄的建议。

     

    问题6:

    如果一个Activity被设置为“singleTop”模式并且还驻留在后台,此时再通过startActivity启动这个Activity时,Activity的___成员函数会被最先回调到,我们一般在这个回调函数中来处理相关逻辑。

      答案:onNewIntent().singTask模式的亦是如此。这个因为刚接触过。想singleTop和singleTask除了一般说的防止产生大量的相同的Activity对象,产生内存中的冗余,

    同时也可以很巧妙的解决一些问题。我有一个固定的Activity,比如简单的某个购物应用的购物栏界面。即,用户在每个购物界面点击添加购买后都会跳转到这个界面然后添加相应的购买商品条目。如果是一般的启动模式,我每次点击添加购买,就重新启动了一个购物车界面,并且在这个界面中也没有前面几次已经购买的商品条目,于我们的思路相违背。因此这个购物栏界面,理论上我就可以设计成一个单例。这样也就同样很容易的解释了这个题目的初衷了吧。因为一般面试官不可能只是看下你的答案,更多的会问下你几种启动模式的运用场景。这里也顺便提及下4种启动模式。这个不算冷门也很实用的知识,可以注意下,同时也可以大致的了解Android中关于Task的知识。

     

    以上即是整理的一部分面试题,做了下记录和如果是我的话来做的一些看法

    *********************************************************************************************/

    以下是我最近觉得自己想到的几个问题。

     

      因为最近说招人的时候,可能部分有2年左右工作经验,1年以上Android开发经验的应聘者,基本薪资都要求在1w上了。于是对于面试的问题也不能仅仅只局限于笔试题这些做烂了的题目或是对方说下某个项目产品的流程框架模块实现什么的。可能更多会要问一下,对于应用界面功能,交互设计的看法,以及如何编码实现一个不失优雅的和功能性的首页面。然后是对于应用常见异常和错误的分析以及解决方式,再简单和细分点就是对于资源代码的优化,自动打包和测试,应用的防篡改和反编译。

     

    题目一;

    功能性界面的实现,比如记住用户名这个功能。

      答:当然,对于初级可能会问按钮按下非按下的效果的实现,也就是选择器的应用。(但是真的,还有人会回答你,监听按钮事件然后代码来实现setbackground。。。)

    言归正传,这个其实应该是很常见功能性界面。一般都是知道大致的思路的,用个偏好设置,保存一下就ok了。那么再细点呢。这个偏好设置要保存的基友几个参数,用户名,密码,然后呢?对了,那就是是否选折记住用户名密码的这个checkbox。因为我一开始做的时候忘记保存这个了。每次无论是否是checkbox是何种状态,我都保存和读取用户名和密码去了。。。

    因此简单的:

     

    图画的比较搓。。因为不太会用。

    当你能把大致思路理清后,那么面试的就知道,这事你能解决,而不是笼统的说,用偏好设置啊。这就好比,在论坛中常看到这样的帖子和问答。

    这个界面布局怎么实现。回答:相对布局。

    好忧郁的回答。。

    当然,最后也要看出题人出的题目,对提问人的要求,首先,该功能性代码量和思路要竟可能的能在短时间完成,并且不是模糊性的。

     

    问题二:

    代码混淆和压缩优化打包输出。

      答:说白了,就是想问下你对progurad是否熟悉以及接触过。问这个问题其实是我自己也不懂,只会最简单的一句话傻瓜配置。但是又想做自定义的配置。

    然后老大说了:对于面试时,你可以问下你自己遇到的,不能解决的问题。呵呵。

    对于第三方jar包加入报错的处理,混淆后应用运行的异常。

    当然,这块问题其实也是渐渐的必须要了解的东西,因为现在的大部分应用基本都重视被反编译的问题了。

    问这个,第一点看面试者是否接触过,如果很熟悉,在原来的项目运用过,自定义配置过,那最好了。

    第二点,如果没有,那么没事,可能却是没用到,那么就看对方是不是自己主动去了解过,简单说,是否有所谓热爱追求新技术,知识的汲取不仅仅局限于当前,有善于发现和进取的心。

     

    问题三:

    代码测试以及优化的了解?

      答:这个可能就觉得这面试官比较傻逼和笼统了。确实,这问题闻到有点蛋疼。

    其实稍微转化下可以问面试者对于原来项目完成后,是否做过测试框架和代码优化调试。

    当然,这个是比较高层次了,因为对于自动化测试什么的,我知道的国内可能就一些大型公司会刻意去定制一套测试机制和框架。

    问这个问题,其实也是自己的私心,因为我也想了解下一般,功能性测试框架或是界面交互性测试框架,个位大牛是如何实现。

    对于代码优化,是否有一套自己成熟的方案。让我也入入门呗。

    对于这个问题,其实你只要能说出自己的想法就可以了,如果你切好做过,那就更棒了。以及碰巧说你简单的用过sdktools下的monkey(测试工具)或是TraceViewer(性能追踪工具),那也不错,说明你知道自己去接触。而不是纯粹在那一味写代码。

     

    问题四:

    自定义的UI设计。

      答:问这个问题其实每个公司可以参考自己产品的用户体验和视觉体验来问。

    当然,既然问的是高手,你就不能傻乎乎的问,比如一个半透明或是dialog风格的的Activity的实现。

    简单点的可以问下如何自定一个界面的加载动画,自定义的dialog。。

    然后如果联系到自身的产品:第一点,由于目前我们的产品的某一个Activity的界面要展示的内容比较多,又不想简单的说用一个scrollView拖拉来实现,如何最有效的的利用有限的界面空间 1>.使用折叠效果的textView,这个也是一个朋友提到的,具体可以产考目前各大app商店,点击某个应用后,产品简介的那个空间。 2>.抽屉效果,这个其实是个不错的效果,具体代码其实网上大把的有,只要你能说出个思路就差不多,因为其实面试人也不是太懂,或者也只是借鉴网上而实现过。

    第二点:自定义的首界面元素。因为我们应用可能下个版本要实现用户自定义的首界面。这个可以参考手机桌面图标拖拉,添加删除效果。这个效果其实有点难度,长按后的界面浮动效果,用户自定义后的配置保存。活着还带点什么特效,自动排序。对于这个涉及到的知识可能就多了,首先可能要对Window和windowmanager这几个对象有很好的了解,配置保存格式或是表单的处理。

     

    问题五:

    Http和Socket协议,xml/json

      答:网络模块这个基本是每个公司都会问的一个问题。因为一个互联网应用,不可能不处理这块内容。

    然后这个问题也是很笼统的,http可能会问下常用的头参数。这个其实没多大意义,但是也是很必要。按意义来说,正的写过很多次网络处理的人,其实也很少去真正了解下各个参数 的含义,可能就字符集,内容类型。其实深入点的可以这么问,是否在原来公司或是项目中f封装过自己的网络处理jar。因为很多公司的网络处理都不是说每个项目重新写起来的。然后对于传输格式的解析。xml就不说了,json这个对于普通对象的处理,对于数组对象的处理,以及是否自己修改过或是简单搞过自己的json解析器。因为Android自带的json解析,就那么九个类,还不带直接解析对象。用起来比较局限。

    问这个问题,主要也不过是看看面试者是否真正接触和书写过网络模块。对于简历中的一句熟悉http xxxx,现在互联网应用基本没几个应用不使用网络模块吧,你的项目中是有这块内容,但是真正的你了解或是做过处理过的,那又有多少呢。

     

    问题六:

    3D动画特效或是游戏方面的

      答:3D动画。首先我觉得会做游戏的人脑子都是比较清晰的,那么多x,y坐标,中心点,旋转点,长,宽,高,角度。参数多的晕人。

    对于简单的2D特效,可能都会,3D能?需要那几个辅助类,Camera 吧。游戏的话View和surfaceView框架的选择。通用的游戏模块分类(这里纯粹是私心哈哈)。我目前也真在学习接触。

    百度 Android开发面试题 
     
    本文来自安卓航班网整理搜集     www.apkway.com 
     
    原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=2057 
    1、 Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 
      DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,
    都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进
    程,所以说可以认为是同一个概念。 
      2、sim卡的EF 文件有何作用 
      sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 
    身可以有自己的操作系统,EF就是作存储并和手机通讯用的 
       
    3、嵌入式操作系统内存管理有哪几种,各有何特性 ?   
      页式,段式,段页,用到了MMU,虚拟空间等技术 
       
      4、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗? 
         
    嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度
    予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作
    出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工
    业控制、军事设备、 
    航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可
    分为软实时和硬实时两种,而android是基于 linux内核的,因此属于软实时。  
         
    5、一条最长的短信息约占多少byte? 
      中文70(包括标点),英文160个字节 
         6、 android中的动画有哪几类,它们的特点和区别是什么? 
      两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方
    式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种 Frame动画,
    传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。 
         
    7、handler机制的原理 
      andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先
    出原则。 Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。  
      1)Looper: 一个线程可以产生一个Looper 对象,由它来管理此线程里的
    Message Queue(消息队列)。 
      2)Handler: 你可以构造Handler对象来与 Looper沟通,以便push新消息到
    Message Queue里;或者接收Looper 从Message Queue取出)所送来的消息。 
      3) Message Queue(消息队列):用来存放线程放入的消息。 
      4)线程:UI thread 通常就是main thread,而Android启动程序时会替它
    建立一个Message Queue。 
        8、说说mvc模式的原理,它在android 中的运用 
       
    MVC(Model_view_contraller)” 模型_视图_控制器”。 MVC应用程序总是由这
    三个部分组成。Event(事件)导致Controller 改变Model或View,或者同时改
    变两者。只要 Controller改变了Models的数据或者属性,所有依赖的View都
    会自动更新。类似的,只要Controller改变了View,View会 
    从潜在的Model中获取数据来刷新自己。 
         
    View重绘和内存泄露的好像是面试经常问的问题 
      1. View的刷新: 
      在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的
    getmessage里面执行invaliate或者postinvaliate. 
       2. GC内存泄露 
      出现情况: 
      1.数据库的cursor没有关闭 
      2.构造adapter时,没有使用缓存contentview 
        衍生listview的优化问题-----减少创建 view的对象,充分使用
    contentview,可以使用一静态类来优化处理getview的过程/ 
       
    3.Bitmap对象不使用时采用recycle()释放内存 
      4.activity中的对象的生命周期大于activity 
      调试方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size] 
      还有其他问题,大家欢迎提出阿,可以是整体架构的,还有这个Hal层. 
        这篇文章会涉及到以下几个内容 
         
    一    Activity的生命周期 
      二   让Activity变成一个窗口:Activity 属性设定 
      三   你后台的Activity被系统 
    回收怎么办:onSaveInstanceState 
       
    四   调用与被调用:我们的通信使者 - Intent 
      一 Activity的生命周期 
      和其他手机  平台  的应用程序一样,Android的应用程序的生命周期是被统
    一掌控的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不
    能改变它,只能学习并适应它。 
       
    简单地说一下为什么是这样:我们手机在运行 一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程
    序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源,
    至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。言归正传,
    Activity的基本生命周期如下代码所示: 
         
    Java 代码 
      public class MyActivity extends Activity 
    {      
    protected void onCreate(Bundle savedInstanceState);         
    protected void onStart();         
    protected void onResume();      
    protected void onPause();         
    protected void onStop();      
    protected void onDestroy();    
    }      
    你自己写的Activity会按需要 
    重 载这些方法,onCreate是免不了的,在一个Activity正常启动的过程中,
    他们被调用的顺序是 onCreate  -> onStart  ->onResume, 在Activity被干掉的
    时候顺序是onPause  -> onStop  -> onDestroy ,这样就是一个完整的生命周期,
    但是有人问了 
    ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的
    一个Activity是全屏的那么:onPause->onStop ,恢复的时候
    onStart->onResume ,如果打断 
    这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只
    是onPause ,恢复 
    的时候onResume 。 
       
    详细介绍一下这几个方法中系统在做什么以及我们应该做什么:      
    onCreate: 
    在这里创建界面,做一些数据的初始化工作 
      onStart: 
    到这一步变成用户可见不可交互的 
      onResume: 
    变成和用户可交互的,(在activity 栈系统通过栈的方式管理这些个Activity
    的最上面,运行完弹出栈,则回到上一个Activity) 
      onPause: 
    到 这一步是可见但不可交互的,系统会停止动画等消耗CPU 的事情从上文的描
    述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降
    低,有可能被系统收回。在这里保存的数据,应该在 onResume里读出来,注意:
    这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才
    启动 
      onstop: 
    变得不可见,被下一个activity覆盖了 
      onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调
    用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用 
    isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在
    onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel
    方法会抛异常的。 
       
    onPause,onstop, onDestroy,三种状态下 activity都有可能被系统干掉为
    了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑
    的内容都保存到存储介质上(一般 都是数据库)。实际工作中因为生命周期的
    变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,
    你还要去维护那个线程,是暂停还是杀 掉还是数据回滚,是吧?因为Activity
    可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都
    是采用Android的消息机制 [Handler,Message]来处理多线程和界面交互的问
    题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟
    大家分享。 
         二   让Activity变成一个窗口:Activity属性设定 
      讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东
    西,那么很  简单你只需要设置一下Activity的主题就可以了在
    AndroidManifest.xml 中定义 Activity的地方一句话: 
      Xml代码 
      android 
    :theme="@android:style/Theme.Dialog"   
      android:theme="@android:style/Theme.Dialog" 
    这就使你的应用程序变成对话框的形式弹出来了,或者  Xml代码 
      android:theme="@android:style/Theme.Translucent" 
    android:theme="@android:style/Theme.Translucent" 
    就 变成半透明的,[友情提示-.-]类似的这种activity的属性可以在
    android.R.styleable 类的AndroidManifestActivity 方法中看到,
    AndroidManifest.xml中所有元素的属性的介绍都可以参考这个类
    android.R.styleable 
         
    上面说的是属性名称,具体有什么值是在android.R.style中 
    可以看到,比如这个"@android:style/Theme.Dialog"就对应于
    android.R.style.Theme_Dialog ,('_'换成'.' <--注意:这个是文章内容不是
    笑脸)就可以用在描述文件 
    中了,找找类定义和描述文件中的对应关系就都明白了。 
         
    三     你后台的Activity被系统回收怎么办:onSaveInstanceState 
      当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的
    Activity B       这个时候A会执行 
       
       Java代码 
      public   
    void onSaveInstanceState(Bundle outState) {         
    super.onSaveInstanceState(outState);       
    outState.putLong("id", 1234567890);    
    }   
    public void 
    onSaveInstanceState(Bundle outState) {      
    B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有
    被回收,被回  收的A就要重新调用onCreate()方法,不同于直接启动的是这
    回 onCreate()里是带上参数  savedInstanceState,没被收回的就还是
    onResume就好了。 
      savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你
    维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate
    就不会有它,所以用的时候要判断一下是否为空。 
       
    Java代码 
      if(savedInstanceState !=null){    
            long id =savedInstanceState.getLong("id");   
    }   
    if(savedInstanceState !=null){         
    就像官方的Notepad教程 
    里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记
    住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。
    这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不
    需要特殊记住什么,哦, 
    没准你需要记住滚动条的位置...   四      调用与被调用:我们的通信使者Intent 
         
    要 说Intent了,Intent就是这个这个意图,应用程序间Intent进行交流,打
    个电话啦,来个电话啦都会发Intent, 这个是Android架构的松耦合的精髓部
    分,大大提高了组件的复用性,比如你要在你的应用程序中点击按钮,给某人打
    电话,很简单啊,看下代码先: 
         
    Java代码 :   
    Intent intent = new Intent();    
    intent.setAction(Intent.ACTION_CALL);    
    intent.setData(Uri.parse("tel:"+ number));    
    startActivity(intent);   复制代码 
    扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。
    什么读联系人,发短信啊,邮件啊,统统只需要扔出intent就好了,这个部分
    设计地确实很好啊。 
         
    那Intent通过什么来告诉系统需要谁来接受他呢? 
      通常使用Intent有两种方法,第一种是直接说明需要哪一个类来接收代码如
    下: 
         
    Java代码 
      Intent intent = new Intent(this,MyActivity.class);    
    intent.getExtras().putString("id","1");    
    startActivity(intent);    
    Intent intent = new 
    Intent(this,MyActivity.class);intent.getExtras().putString("id","1");
    tartActivity(intent);复制代码 第一种方式很明显,直接指定了MyActivity 为接受者,并且传了一些数据给
    MyActivity,在MyActivity里可以用getIntent()来的到这个 intent 和数据。  
         
    第二种就需要先看一下AndroidMenifest中的 intentfilter的配置了 
        Xml代码 
      <intent-filter>      
    <action android:name="android.intent.action.VIEW" />   
    <action android:value="android.intent.action.EDIT" />    
    <action android:value="android.intent.action.PICK" />       
    <category android:name="android.intent.category.DEFAULT"/>    
    <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />   
    </intent-filter>   
       
    <intent-filter>       
    <action android:name="android.intent.action.VIEW"/>       
    <action android:value="android.intent.action.EDIT" />       
    <action android:value="android.intent.action.PICK" />       
    <category android:name="android.intent.category.DEFAULT" />       
    <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /> 
    </intent-filter> 
    这里面配置用到了action, data, category 这些东西,那么聪明的你一定想到
    intent里也会有这些东西,然后一匹配不就找到接收者了吗? 
      action其实就是一个意图的字符串名称。 
      上 面这段intent-filter的配置文件说明了这个Activity可以接受不同的 
    Action,当然相应的程序逻辑也不一样咯,提一下那个 mimeType,他是在ContentProvider里定义的,你要是自己实现一个ContentProvider 就知道了,
    必须指定 mimeType才能让数据被别人使用。 
         
    不知道原理说明白没,总结一句,就是你调用别的界面不是直接 new那个界面,
    而是通过扔出一个intent,让系统帮你去调用那个界面,这样就多么松藕合啊,
    而且符合了生命周期被系统管理的原则。 
      想知道category都有啥,Android为你预先定制好的action都有啥等等,请
    亲自访问官方链接Intent 
      ps:想知道怎么调用系统应用程序的同学,可以仔细看一下你的logcat,每次
    运行一个程序的时候是不是有一些信息比如: 
       
    Starting activity: Intent 
    {action=android.intent.action.MAINcategories={android.intent.category
    .LAUNCHER}flags=0x10200000comp={com.android.camera/com.android.camera
    .GalleryPicker} } 
      再对照一下Intent的一些set方法,就知道怎么调用咯,希望你喜欢:) 
         
    一,listview你是怎么优化的。 
    二,view的刷新,之前说过 
    三,IPC及原理 
    四,Android多线程 
    五,Android为什么要设计 4大组件,他们之间的联系,不设计行不行(主要是
    为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模
    式做得很好【Technicolor的面试官问的这个】) 
    六,service的周期,activity的周期,谈下你对Android内部应用的了解,比
    如他做电话,以及联系人等等应用。框架层有很多东西还是多看看,熟悉 Android
    怎么做的,不管你做应用程开发还是应用框架层开发很有好处的。 
       在就是你项目经验,突出你遇到什么难点,然后是怎么解决的!尽量将每个技术
    点凸显出来,当然面试官有时候会为了体现你是否真正做过,他会问你,你在这
    个应用中做那个模块,用了多少个类之类的问题。 
       
    偶尔有的面试官会问你,你用过Android自带的单元测试了没,怎么用的? 
       
    当然我面试过很多家单位,有的是做平板,手机,数字电视,有的是做出个 erp
    之类的客户端等等,出于前面的三个,基本上都是将 Android的全部改掉,如果
    真正要做Android的话,大家要学的还很多。 
         
    总 之,一句话,什么样的面试官都有,去面试的时候要做好一切心理准备,不
    管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的
    普通话, 最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样
    你获得offer的机会更大,谈工资也有优势~~当然曾经一家公司的面试官跟我说
    过,技术 是不惜钱的,只要你有能力,多少钱他都请。 
        1.View如何刷新? 
      2.DDMS与TraceView的区别? 
      3.activity被回收了怎么办? 
      4.在Java中如何引入 C语言? 
       
    参考答案 : 
      1.View 可以调用invalidate()和postInvalidate()这两个方法刷新 
      2.DDMS是一个程序执行查看器,在里面你可以看见线程和堆栈等信息,
    TraceView是程序性能分析器 
      3.activity回收了,那就只有另起了 
      4.java调用C语言程序,可以用JNI接口来实现 
      上面答案仅作参考,毕竟我个人能力也有限嘛,难免会回答错误,呵呵..... 
    解答:   1.View受系统刷新(系统内部有个循环,监控事件、做业务处理、绘UI),
    可以用postInvalidate()促使系统刷新。 
      2.(还真不知道) 
      3.请参照Activity生命周期,如果被系统destroy了,也就是说的回收,只
    有从新start了 
      4.通过JNI调用。建议阅读《The Java Native InterfaceProgrammer's Guide 
    and Specification》,英文版的,从sun网站下吧。 
     

     

    好吧,问的有点偏题了。

    其实总结下:

      1.如果你可能刚毕业,接触Android大半年或是培训过,有几个好不错的demo项目并且能理清里面的思路,要的4-6千水平的薪资,你是个踏实的人。对于面试,能知道大部分的基础知识,了解一个项目的流程,并且有上进心,那就很不错了。你知道自己能干什么,也会知道你还要干什么。因为你不可能把薪水局限在这么点吧。

      2.如果你有1年上未满两年Android开发经验。至少你跟团队完成1-2款成熟的商业项目,熟悉这个项目流程,至少参与30%以上编码。完全熟悉网络协议和处理。实现多种自定义的控件等,那么你要个8-10k上下的薪资,过年过节发个奖金,也算是个性情中人。对于面试时,你基本可以直接和面试官交流你的项目的过程和成果,你自己对项目的改进优化的看法,用的觉得自己比较出彩的技术,以及那些难点或是顽固性bug的解决。

      3.这第三条其实不太好总结了。因为没见过,或是没法定位。熟悉多平台开发。3年以上工作经验,1年ios,2以上年的Android。基本开的要求都在1.5-2w了。仅是开工资的这其实也不算太高,因为如果你真有这方面多平台开发经验,我想,你不仅仅只是个开发工程师的角色了。走技术还是产品,也是个人爱好了。参与过几个平台至少1款商业项目的整体开发,当然如果是独立开发过,那就更加出色了。因为这比纯粹的拿到一个半成品的项目增加或是修改来的难度高多了。然后或是有线上的app应用,无论下载量如何,至少你开始有自己的想法了。

    并且这样水品的人除了工资要求,可能还会考虑其他的福利问题。那面试中问到的问题就多了。

      4.这边突然发现中间断了一层。一般市场开1-1.5w的开发人员。那么这部分可能已经可以担任一个中小级项目的项目经理了,至少他应该独立完成过一款产品(不包含视觉,交互,美工设计)。那么就可以问下对于应用优化,有利于团队协作管理的方面的问题。版本控制,自动打包测试。也就是上面我简单总结的几方面的问题。

    本人其实也不懂,只不过有这方面的人来面试,我觉得吧,总的问几个别太二逼的问题吧。并且意义性比较大。顺便也能提高下自己。

    展开全文
  • 2018最新最全java高级工程师面试题,2018最新最全java高级工程师面试题2018最新最全java高级工程师面试题,2018最新最全java高级工程师面试题 十几个文档
  • 进阶前端高级工程师

    2019-07-23 15:01:32
        前端工程师的成长,我认为主要在两个方面,一部分是“能力”,一部分是“知识”。我个人的观点,能力占80%,知识只占20%。所以你掌握了知识还远远不够,更重要的是要掌握学习的方法,快速提升自己的能力。 &...

        前端工程师的成长,我认为主要在两个方面,一部分是“能力”,一部分是“知识”。我个人的观点,能力占80%,知识只占20%。所以你掌握了知识还远远不够,更重要的是要掌握学习的方法,快速提升自己的能力。
    在这里插入图片描述
        在前端的技能模型里,对“知识”是没有任何硬性要求的,而且“前端知识”应该是一个垂直的模块,它不能直接帮助你进阶下一个更高的级别,但是它能提升你的潜力,使你未来能走得更远。**
    在这里插入图片描述
    对于想要进阶前端高级工程师的同学来说,尤其要培养自己的编程能力、架构能力和工程能力。

    编程能力,就是用代码解决问题的能力。

    你编程能力越强,就能解决越复杂的问题,细分又有调试、算法、数据结构、操作系统原理等基础的支撑,你才能解决各种麻烦的问题。

    架构能力,就是掌控复杂系统的能力。
    当一个系统足够复杂,你会写每一块、能解决每一个问题,不等于你能搞定整个系统,这就需要架构能力。架构能力包含了一些意识,比如解耦、接口隔离,也包含认识业务建立抽象模型,也有一些常见的模式,比如经典的 MVC,还有设计层面,比如面向对象、设计模式等。

    工程能力,其实核心就是成事的能力。
    你要知道,当系统规模越来越大时,光靠你一个人是没办法完成的。那如何保证几个高手互相能够配合好?如何保证项目里面水平最差的人不拖后腿?工程化建设,往往会跨越多个业务,包括前后端解耦、模块化、质量保证、代码风格等。

    展开全文
  • 从一个普通开发人员到高级开发人员,他们之间有什么差距呢?只需要通过努力提升自己专业知识就能弥补这些差距嘛?阅读这篇文章,你就知道,高级开发人员比你高的不仅仅有技术,更多的是对成长晋升的思...


    从一个普通开发人员到高级开发人员,他们之间有什么差距呢?只需要通过努力提升自己专业知识就能弥补这些差距嘛?阅读这篇文章,你就知道,高级开发人员比你高的不仅仅有技术,更多的是对成长晋升的思考。

    防水耐脏,超大容量双肩包,限时拼团仅需49元

    作者 | Tomasz Łakomy

    译者 |弯月,责编 | maozz

    出品 | CSDN(ID:CSDNnews)

    以下为译文:

    职位的定义往往非常棘手。毕竟,确立某人为初级/普通/高级开发的过程就像是设法将他们掌握的所有技术都归结到一个“标签”中。

    目前我担任前端工程师的面试官,而我经常问的一个问题是(前方剧透预警!):

    “您认为,高级开发人员和普通开发人员有什么区别?

    注意:我不喜欢“普通”开发人员标签,也许我应该使用“中级”,但感觉还是有点奇怪,所以我还是继续使用“普通”吧。

    这个问题没有正确答案,而且我并不觉得每个人的答案都一样。就个人而言,我认为这个问题能引发有关开发人员广泛职责的讨论。此外,我真诚地希望了解他人的观点——我们的工作是编写代码?还是编写测试?还是交付产品?指导别人?写文档?我们是人类吗?还是说我们是舞者?

    更努力、更好、更快、更强

    当我刚步入开发的职业生涯时,我记得公司的高级工程师给我留下了难以置信的印象。他们拥有不可思议的力量,无论你提出何种问题,他们都能够解决。

    是的,作为高级开发人员,你应该能够解决与专业领域相关的各种问题。

    然而,高级开发不是机器。

    而且他们也不应该是机器,高级开发并不意味着:“这个人每小时可以编写30个redux action。”我敢肯定,在有些公司里,如果你能成为一个更好、更快、零bug(呵呵)的开发人员,那么就能获得晋升。但是老实说,高级开发的意义不仅限于此。这不是一个“是什么”的问题,而是一个“怎样”的问题,更重要的是“为什么”的问题。

    很多书通篇都在描述关于技术决策的制订。这是一个极其复杂的领域,需要考虑很多因素。最好的方法是提出多种做法,同时回避一些做法。而不是千篇一律地说:

    “过去20年中,我一直在做这份工作,所以我会坚持做下去,因为除此之外我什么都不懂,而且坦白说我有点害怕学习新东西。

    所有这些都非常重要,但问题在于:我认为高级开发人员必然会对他们的组织产生影响。这意味着:他们的工作不仅仅是将JIRA票转换成代码。

    编写代码之外的思考

    我想引用一个非常聪明的人的一段话:你的目标是通过代码解决问题。

    如果你对需要构建/维护的系统有深刻的了解,则可以做出纯技术之外的决策。这个功能有必要吗?它能解决什么问题?我们可以用其他方式解决这个问题吗?我们想要解决这个问题吗?

    这种思路有时被称为业务环境,但是如果你想做好自己的工作,则不仅应该了解环境,还应该能够塑造和影响这个环境。并非只有在组织中担任高管的人才能影响产品。至少,你需要了解。

    这不仅关系到你编写的代码,即使你不会触及的代码也同样重要。高级开发人员能够考虑到代码之外的事情,从更广泛的角度看待他们的产品,并考虑他们的下一行代码是否会有助于实现团队的目标。

    举个例子——你可以花费整个Sprint,根据规格利用react-helicopter来实现两个不同版本的界面,然后启用A/B测试验证。这是一个了不起的方法。

    但其实,你可以考虑(例如)公司80%的销售额都来自20%的用户。为什么不给这些用户发送电子邮件?询问他们的意见?或者也可以直接打电话给他们?

    当然,这只是一个简单的例子,但它说明了一个问题:我们首先应该考虑的是问题,而不是代码。大多数问题可以都通过多种方式解决,高级工程师都应该思考编写代码之外的东西。

    帮助他人

    有一种感觉:你确切地知道功能的全部含义,你可以戴上耳机,在悠扬的音乐声中心无旁骛地写一天代码。这种感觉简直无与伦比,是不是?

    确实如此,然而如果你周围的人需要帮助,那么你就不能置身事外了。高级开发理应指导其他经验不足的开发人员。我个人见过很多经验丰富的开发人员,他们显然忘记了茫然不知所措的样子。

    有一点很重要,我们需要记住,那就是并非每个人都适合进行一对一的面对面指导,这没关系。你可以通过代码审查,编写良好的README文档,以及为文档和体系结构决策(理想情况下,这些文档应有据可查)做出贡献等方式,来帮助别人达成目标。简而言之,你应该成为“+10% BUFF的工程师”。

    高级工程师经验丰富,但是将这些经验据为己用绝对不公平。我个人认为高级工程师这个职位最重要的一项职责是促进知识共享的文化。

    写博客、演讲资料、文档或在Slack上粘贴链接,这些方式统统可以。看到同一家公司里的两个团队重复解决同一个问题是一件可悲的事情,而高级开发需要确保这种情况不会发生。

    怎样才能晋升到高级开发的职位?

    首先你需要提升自己。

    严肃地说,晋升到高级开发职位的最佳方法是胜任高级开发的工作。

    开拓代码的视野,洞悉代码与整个系统的关系。积极地观察,挖掘优化的机会。针对你的应用进行性能审核(无需他人提醒),并努力将你的主页的性能提高10%。积极地帮助他人(他们会心存感激)。积极地推进组织的知识共享文化,积极地为这些计划做贡献。走出舒适区,积极地为其他项目和任务贡献自己的力量。

    最后,祝大家好运!

    原文:https://dev.to/tlakomy/so-what-does-it-mean-to-be-a-senior-developer-18mk

    本文为 CSDN 翻译,转载请注明来源出处。 

     热 文 推 荐 

    网易与被裁员工和解,互联网 HR 如何花式裁员?

    用 Python 爬取热搜记录,看看王思聪究竟上了多少次热搜?

    腾讯再出新招!社交新产品“有记”已上线?

    互联网公司的裁员,能玩出多少种花样?

    丁磊向左,刘强东向右

    一张图生成定制版二次元人脸头像,还能“模仿”你的表情

    你点的每个“在看”,我都认真当成了喜欢

    展开全文
  • Java高级工程师面试之路

    千次阅读 2020-04-20 10:44:28
    最近在面试java的工作所以略微总结下所遇到的一些面试以及技巧 1、背熟你的简历 面试的第一个问题,一般都是让你简单介绍下你自己,或者介绍一下你最近的项目,而一个面试者,如果连自己的简历都无法熟知,对...

    最近在面试java的工作所以略微总结下所遇到的一些面试以及技巧

    下面是面试题基础总结

    一、面试题基础总结

    1、 JVM结构原理、GC工作机制详解

    答:具体参照:JVM结构、GC工作机制详解     ,说到GC,记住两点:1、GC是负责回收所有无任何引用对象的内存空间。 注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,2、GC回收机制的两种算法,a、引用计数法  b、可达性分析算法(  这里的可达性,大家可以看基础2 Java对象的什么周期),至于更详细的GC算法介绍,大家可以参考:Java GC机制算法

    2、Java对象的生命周期

    答:创建阶段 、 应用阶段 、不可见阶段 、不可达阶段 、收集阶段 、终结阶段、 对象空间重新分配阶段等等,具体参照:Java 对象的生命周期

    3、Map或者HashMap的存储原理

    答:HashMap是由数组+链表的一个结构组成,具体参照:HashMap的实现原理

    4、当数据表中A、B字段做了组合索引,那么单独使用A或单独使用B会有索引效果吗?(使用like查询如何有索引效果)

    答:看A、B两字段做组合索引的时候,谁在前面,谁在后面,如果A在前,那么单独使用A会有索引效果,单独使用B则没有,反之亦然。同理,使用like模糊查询时,如果只是使用前面%,那么有索引效果,如果使用双%号匹配,那么则无索引效果

    5、数据库存储日期格式时,如何考虑时区转换问题?

    答:使用TimeStamp ,  原因参照:Java编程中遇到的时区转换问题

    6、Java Object类中有哪些方法?

    答:Object有哪些方法

    7、HTTP协议,GET和POST 的区别

    答:浅谈HTTP中GET和POST的区别

     8、简述一下面向对象的特征,并举例说明你对面向对象的理解?

    面向对象是基于万物皆对象这个哲学观点,把一个帝乡抽象成类,具体就是你吧一个对象的静态特征和动态特征抽象成属性和方法,也就是把一类事务的算法和数据结构封装在一个类之中,程序就是多个对象和互相间的通信组成的。

    面向对象具有封装性,继承性,多态性。封装隐蔽了对象内部不需要暴漏的细节,似的内部细节的变动跟外界脱离,只依靠接口进行通信。封装性降低了编程的复杂性。通过继承,使得新建一个类变得容易,一个类从派生类哪里获得其非私有的方法和公用属性的繁琐工作交给了编译器。而继承和实现接口和运行时的类型标定机制所产生的多态,使得不同的类所产生的对象能够对相同的消息做出不同的反映,记得提高了代码的通用性。

    总之,面向对象的特性提高了大型程序的重用性和可维护性。

    9、线程同步的关键字是什么?sleep() 和 wait() 有什么区别?怎么唤醒wait()停止的线程?(5分)

    线程同步的关键字:synchronized

    Sleep()和Wait()的区别:

    1. 父类不同Sleep()来自Thread类,wait()来自Objcet类
    2. 最主要的是sleep()方法没有释放锁,而wait方法释放了所,使得其他线程可以使用同步空值快或者方法。

    Sleep不让出系统资源;wait是进入线程等待池等待,让出系统资源,其他线程可以占用cpu,且需要notify,notifyAlll来唤醒等待池中的线程。

    1. 使用范围:wait,notify和notifyAll只能在同步空值方法或者同步控制块里使用,而sleep可以在任何地方使用
    2. Sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

    10、java的多态表现在哪里;

    父类引用指向子类对象

     

    11、接口有什么用;

    一是实现多重继承,因为java是单根语言。

    二是便于实现各种框架,java 的各种框架中,都是拿接口调来调去。一旦你实现了这个接口,你的代码就嵌入了框架。

    三是为了实现前面各位说的规范。

    12、tcp,udp区别;
    1、基于连接与无连接。
    2、TCP要求系统资源较多,UDP较少。
    3、UDP程序结构较简单。
    4、流模式(TCP)与数据报模式(UDP)。
    5、TCP保证数据正确性,UDP可能丢包。
    6、TCP保证数据顺序,UDP不保证。
    7、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
    8、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。


    13、悲观锁和乐观锁的区别,怎么实现;

    悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

    乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

    两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。

    14、http请求与响应,TCP三次握手&四次分手

    参考:https://blog.csdn.net/qq_33616529/article/details/78288883

    15Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

    参考:http://outofmemory.cn/c/java-outOfMemoryError

    16、java里有什么数据结构

    参考: https://www.cnblogs.com/yangyquin/p/4921664.html

    17JAVA处理千万级数据(单线程)

    参考:https://blog.csdn.net/qq_41790443/article/details/83719466

    18JVM调优浅谈

    19字节流和字符流

    参考:https://blog.csdn.net/qq_34707744/article/details/79802252

    20Java并发编程:Lock和synchronized

    参考:https://www.cnblogs.com/dolphin0520/p/3923167.html

    21java设计模式

    参考:https://blog.csdn.net/isanovice/article/details/80497930

    22基于Zookeeper开源客户端Curator实现分布式锁

    参考:https://blog.csdn.net/fanrenxiang/article/details/81704691

    23Git的各种工作流

    参考:https://blog.csdn.net/qq_35865125/article/details/80049655

    24.Git在linux下创建仓库

    参考:https://www.cnblogs.com/HuSay/p/9101130.html

    25git解决冲突

    参考:https://www.cnblogs.com/gavincoder/p/9071959.html

    26java中并发Queue种类与各自API特点以及使用场景!

    参考:https://www.cnblogs.com/houzheng/p/9124764.html

    27io和nio的区别

    参考:https://blog.csdn.net/henglang5194/article/details/78138515

    28synchronized的底层、版本的区别

    参考:https://blog.csdn.net/xlantian/article/details/89211386

    29类加载的几种方式,类的加载过程

    参考:https://blog.csdn.net/weixin_42447959/article/details/81255112

    参考:https://blog.csdn.net/weixin_38832563/article/details/81449940

    30java常见的几种排序算法

    参考:https://www.cnblogs.com/ll409546297/p/10956960.html

    31、list删除某个元素的三种方法

    参考:https://blog.csdn.net/sinat_35757488/article/details/95347864

    32、volatile和synchronized的区别

    参考:https://www.cnblogs.com/kaleidoscope/p/9506018.html

    二、Spring和SpringMVC框架方面知识

    1、spirng底层实现原理

    参考:https://www.cnblogs.com/shuai-server/p/9011334.html

    2、Spring中事务管理支持哪几种方式以及每种方式的具体使用方法。

     实现方式两种:

     编码方式;

     声明式事务管理方式。

     声明式事务管理是通过AOP技术实现的,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完成目标方法后根据执行情况提交后回滚事务。

    声明式事务管理有两种方式:基于XML配置文件(拦截器 AOP),通过标签@Transaction注解

    3、spring里面的aop的原理是什么;
    AOP的主要原理:动态代理
    1.静态代理: 
     针对每个具体类分别编写代理类; 
     针对一个接口编写一个代理类; 
    2.动态代理: 
    针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类

    4、Spring 事务的隔离性,并说说每个隔离性的区别

    解答:Spring事务详解

    5、Spring事务的传播行为,并说说每个传播行为的区别

    解答:Spring事务详解

    6、简单说说Spring 事务机制

    解答:Spring事务机制

    7、Spring 4.0新特性

    解答:Spring4新特性

    三、springcloud方面知识

    1、springboot启动流程

    参考:https://www.cnblogs.com/trgl/p/7353782.html

    2、Spring Cloud Ribbon负载均衡策略自定义配置

    参考:https://blog.csdn.net/u010816545/article/details/80461957

    3、Eureka的底层

    参考:https://blog.csdn.net/shaojianjun521/article/details/91848846

    4、Hystrix隔离策略

    参考:https://www.cnblogs.com/linjiqin/p/10191389.html

    四、redis方面基础知识

    1、redis分布锁

    参考:https://blog.csdn.net/turbo_zone/article/details/83422215

    2、redis缓存穿透、缓存击穿、缓存雪崩区别和解决方案

    参考:https://blog.csdn.net/starskyboy/article/details/97621570

    五、elasticsearch方面基础知识

    1、elasticsearch 原理和使用

    参考:http://www.xytschool.com/group/190.html

    2、ES 的query 和 filter 区别

    参考:https://blog.csdn.net/qq_29580525/article/details/80908523

    六、数据库

    1、一条sql执行过长的时间,你如何优化,从哪些方面?

    答:

    1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)

    2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合

    3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度

    4、针对数量大的表进行历史表分离(如交易流水表)

    5、数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步

    6、explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等

    7、查看mysql执行日志,看看是否有其他方面的问题

    2、mysql数据库索引实现原理

    参考:https://blog.csdn.net/lucky_ly/article/details/90733661

    3、数据表分区

    参考:Oracle中的几种分区表方法

    具体分区操作:https://www.cnblogs.com/mliudong/p/3625522.html

     

    4、数据库中索引失效(原因)

    参考:https://blog.csdn.net/qq_28081081/article/details/81150842

    5.什么是索引?Mysql目前主要的几种索引类型

    参考:https://blog.csdn.net/liutong123987/article/details/79384395

    https://blog.csdn.net/always_younger/article/details/79558628

    5、mybatis里面的#和$之间的区别

    参考:https://blog.csdn.net/qq_34237136/article/details/83781290

    6、Select Count(*)、Count(1)、Count(0)的区别和执行效率比较

    参考:https://www.cnblogs.com/zyy1688/p/10436816.html

    展开全文
  • 非常好的java高级工程师高薪简历,祝你获得好工作、高薪待遇,助你平步青云,你求职的必备神器。
  • 你和高级工程师的差距在哪儿?

    千次阅读 2018-01-08 16:30:52
    一个程序员的成长之路,会经历多个阶段,从初级工程师、中级工程师到高级工程师再到这个领域的专家,但是能成为技术专家的终归是少数,因此我们通常给自己规划的是前几个阶段。刚毕业的时候就在想,如何能成为高级...
  • 什么是高级工程师

    千次阅读 2009-09-16 09:29:00
    最近和很多认为自己是高级工程师的程序员聊过,发现了一个很显著的问题,大家以为自己会ssh,会点小模块的设计就是高级工程师了。对自己的定位很模糊。从这里也反馈出当前市场对高级工程师的定位标准各不相同。在...
  • https://tieba.baidu.com/p/6626343323?pid=131596903736&cid=0&red_tag=2381637719#131596903736
  • .NET高级软件工程师的面试题目

    万次阅读 2010-06-26 11:26:00
    公司:国企,主做民航相关信息化应用系统 职位:.NET高级软件工程师 1. 什么是虚函数?子类需要对虚函数做什么?虚函数有什么用? 2. B/S与C/S不同,优缺点 3. Web页面中传值的方式 ...
  • 初级中级高级测试工程师的区别

    千次阅读 2014-08-15 17:56:47
    初级测试工程师  很多人理解软件测试就是在计算机按来按去去寻找软件缺陷,诚然,初级软件测试工程师一般只做很黑测试,也就是说,按部就班的执行测试用例,当预期结果与实际结果不符时,就认为可能寻找到一个软件...
  • Java高级工程师常见面试题-总结

    千次阅读 多人点赞 2019-06-24 15:15:56
    《Java高级工程师常见面试题(一)-Java基础 》 《Java高级工程师常见面试题(二)-Java IO》 《Java高级工程师常见面试题(三)-Java Web》 《Java高级工程师常见面试题(四)-JVM》 《Java高级工程师常见面试...
  • android高级工程师应该会的知识

    千次阅读 2016-06-30 00:59:33
    图片来自网上,侵删:
  • 成为java高级工程师需要什么

    千次阅读 2014-12-19 13:07:45
    我要说明,您要想从本文中学到一些JAVA高级知识是学不到的,因为本文告诉您的作为一个(高级)JAVA工程师应该学什么,而不是告诉您具体的知识细节。 一、JAVA。要想成为JAVA(高级工程师肯定要学习JAVA。一般的...
  • 阿里巴巴任职职级

    万次阅读 2013-05-30 22:43:38
    阿里系的纯技术线(项目经理一类...P06 高级研发工程师 P07 专家 P08 高级专家 P09 资深专家 P10 研究员 P11 高级研究员 P12 科学家 P13 高级科学家 M是管理路线 M1 主管 与P5相当 M2 经
  • 性能测试的基本流程

    千次阅读 2017-05-04 21:47:06
    1.性能测试需求分析:项目经理、业务/架构专家、产品经理、高级性能测试工程师、开发经理; 2.性能测试计划:高级性能测试工程师、项目经理、架构师、产品经理; 3.性能测试准备:性能测试工程师、外部支持(网络...
  • 成为Android高级工程师看这里就够了

    万次阅读 2017-12-09 13:38:36
    关于我我是IsCoding,11年开始做 Android 开发 这一做就是7年 在创业公司负责过技术,拿到过...如果一个开发者,想成为一个高级工程师,去做高级工程师需要做的事,了解一个高级工程师需要的知识,然后一步一步学习
  • 对软考数据库系统工程师教材按章节进行了细致的讲解,包括数据结构,操作系统,网络基础,数据库技术,数据库设计等。让考生明白考查知识点以及解题思路和方法,做到举一反三,事半功倍。
  • 大公司高级Android工程师技能要求

    万次阅读 2017-02-06 14:39:42
    这是我收集的一些大公司关于Android工程师(准确来说是高级Android工程师)的要求 希望给那些想进大公司的开发者一些参考,看看自己掌握了多少技能,还需要学习一些什么知识技术 以下要求均来自于智联招聘和猎聘网...
  • 高级测试工程师68道面试题

    万次阅读 多人点赞 2018-04-10 23:05:37
    TesterHome收集的一些中高级测试工程师的68道面试题,转存。软性热身题这种题目,考的就是你的软性能力,比如表达能力,理解能力,协调能力,一个词概括就是套路。这类题目会在面试开始热身的时候,问一道两题,不会...
1 2 3 4 5 ... 20
收藏数 159,769
精华内容 63,907
关键字:

高级工程师