首页 文章 精选 留言 我的

精选列表

搜索[面试],共5088篇文章
优秀的个人博客,低调大师

NET工程师求职面试必杀技

一、.NET框架 开发人员应该熟悉.NET FrameWork体系结构和基本原理,熟悉CLR(公共语言运行时)和MSIL(中间语言),熟悉.NET框架中的委托、线程、序列化、集合、垃圾回收机制、反射等内容。 二、面向对象软件开发 开发人员应该熟悉面向对象软件开发(OOP)基本概念,熟悉面向对象软件开发中的类、继承、封装、多态等概念,具备良好的面向对象软件开发思想和设计原则。 不论是采用何种软件开发框架,还是使用不同的开发语言,面向对象软件开发在其中畅通无阻。 三、反射 通过反射技术可以得知类的详细信息,包括成员变量、属性、方法,可以实现动态加载技术(Java也有类似技术)。 四、正则表达式 用正则表达式可以轻松实现对数据的校验和修改、替换等,这个最先在Perl语言中的技术,现在已经各个编程语言广泛吸收了,在.Net中掌握了这门技术对文本操作也是轻松平常。 五、C# 开发人员应该熟练掌握C#这门面向对象编程语言,虽然.NET框架支持多种编程语言,但C#无疑是最简洁、使用者最广泛和功能最强大的一种。 C#是一门年轻的语言,它的出现,让更多的开发者爱上了C#,脱离了VB和ASP的阵营,造成离别。 六、ASP.NET 开发人员应该理解ASP.NET的页面生命周期、熟悉配置文件的格式、熟悉ASP.NET的各种服务器控件和数据控件、了解ASP.NET中的各种对象,了解ASP.NET2.0新特性。 七、数据库 开发人员需了解各种主流数据库,熟悉数据库的规范设计、精通SQL及存储过程、触发器的编写。 八、AJAX技术(JAVASCRIPT和XML) XML和JAVASCRIPT的跨平台特性,在实际软件开发中的运用越来越广泛,由于现代软件对用户界面和WEB前端的日益重视,集JAVASCRIPT和XML技术于大成的AJAX正在流行,特别是在基于WEB2.0的网站开发中。 JAVASCRIPT和XML技术已经出现多年,此前一直不痛不痒,但由于集JAVASCRIPT和XML于大成的AJAX技术的出现及其在互联网上的不断应用,又重新焕发出生命活力,将众多的开发者牢牢系住,在2006年红透了整个IT界,2007年AJAX技术将继续红火。 九、设计模式 有了IDE,懂一些基本语法就可以编写.Net程序了,再熟练一些就可以编写出高效率的程序了,如果想程序更灵活,将来更容易扩展和适应更多的需求变化,你就需要了解、掌握设计模式了。 十、软件体系架构(拳头) 优秀的软件离不开优秀的软件体系架构,作为开发人员,要想在IT行业更进一步,需要具备系统的、良好的软件体系架构思维,从而从更高层次决定软件的整体系统框架。 结束语:无论多可怕的武器,也比不上人类的信心。所以人类最厉害的武器。便是自己的信心。相信你自己,做最好的自己,你就会成功! 本文转自周金桥51CTO博客,原文链接:http://blog.51cto.com/zhoufoxcn/166980 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android--面试中遇到的问题总结(一)

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/56479430 一、handler 一、主要涉及到的类有Handler、Thread、Message、Looper、MessageQueue; 二、.异步消息处理机制的作用主要有刷新UI和线程间通信 三、 .Handler主要是发送消息(sendMessage),处理消息(handlerMessage)的类; Message就是在线程之间传递的消息,它可以携带少量信息,在线程间进行信息交换; Looper主要是管理消息队列的,一旦调用Loop()方法之后就会进入到一个无线循环中去,每当发现 MessageQueue 中存在一条消息,就会将其取出,并传递到 handleMessage()方法当中,每个线程中也 只会 有一个Looper对象; MessageQueue消息队列用来存储handler传过来的消息的,每个线程只有一个消息队列。 二、手机屏幕适配 1.布局文件适配:多用match_parent、wrap_content,weight;多套布局文件 2.图片资源适配:根据手机屏幕分辨率的不同,制作几套图片资源;使用自动拉伸位图:Nine-Patch的图片类 型 3.布局控件尺寸适配:尽量使用密度无关像素 dp或独立比例像素 sp单位指定尺寸 4.自定义控件,利用代码根据屏幕的大小动态设置界面的显示大小 使用 “wrap_content”,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 “match_parent”(在低于 API 级别 8 的级别中称为 “fill_parent”)则会展开组件以匹配其父视图的尺寸。 如果使用 “wrap_content” 和 “match_parent” 尺寸值而不是硬编码的尺寸,视图就会相应地仅使用自身所需的空间或展开以填满可用空间。 此方法可让布局正确适应各种屏幕尺寸和屏幕方向。 weight是线性布局的一个独特的属性,我们可以使用这个属性来按照比例对界面进行分配,完成一些特殊的需求。 三、内存泄漏的原因 1.资源对象没关闭造成的内存泄漏:资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们,以便它们的缓冲及时回收内存。它们的缓冲不仅存在于 java虚拟机内,还存在于java虚拟机外。如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄漏。因为有些资源性对象,比如 SQLiteCursor(在析构函数finalize(),如果我们没有关闭它,它自己会调close()关闭),如果我们没有关闭它,系统在回收它时也会关闭它,但是这样的效率太低了。因此对于资源性对象在不使用的时候,应该调用它的close()函数,将其关闭掉,然后才置为null.在我们的程序退出时一定要确保我们的资源性对象已经关闭。 2.构造Adapter时,没有使用缓存的convertView:public View getView(int position, ViewconvertView, ViewGroup parent) 来向ListView提供每一个item所需要的view对象。初始时ListView会从BaseAdapter中根据当前的屏幕布局实例化一定数量的 view对象,同时ListView会将这些view对象缓存起来。当向上滚动ListView时,原先位于最上面的list item的view对象会被回收,然后被用来构造新出现的最下面的list item。这个构造过程就是由getView()方法完成的,getView()的第二个形参View convertView就是被缓存起来的list item的view对象(初始化时缓存中没有view对象则convertView是null)。由此可以看出,如果我们不去使用 convertView,而是每次都在getView()中重新实例化一个View对象的话。 3.Bitmap对象不在使用时调用recycle()释放内存 4.试着使用关于application的context来替代和activity相关的context:有一种简单的方法来避免context相关的内存泄漏。最显著地一个是避免context逃出他自己的范围之外。使用Application context。这个context的生存周期和你的应用的生存周期一样长,而不是取决于activity的生存周期。如果你想保持一个长期生存的对象,并且这个对象需要一个context,记得使用application对象。你可以通过调用 Context.getApplicationContext() or Activity.getApplication()来获得。 5.注册没取消造成的内存泄漏 一些Android程序可能引用我们的Anroid程序的对象(比如注册机制)。即使我们的Android程序已经结束了,但是别的引用程序仍然还有对我们的Android程序的某个对象的引用,泄漏的内存依然不能被垃圾回收。调用registerReceiver后未调用unregisterReceiver。 比如:假设我们希望在锁屏界面(LockScreen)中,监听系统中的电话服务以获取一些信息(如信号强度等),则可以在LockScreen中定义一个 PhoneStateListener的对象,同时将它注册到TelephonyManager服务中。对于LockScreen对象,当需要显示锁屏界面的时候就会创建一个LockScreen对象,而当锁屏界面消失的时候LockScreen对象就会被释放掉。 但是如果在释放 LockScreen对象的时候忘记取消我们之前注册的PhoneStateListener对象,则会导致LockScreen无法被垃圾回收。如果不断的使锁屏界面显示和消失,则最终会由于大量的LockScreen对象没有办法被回收而引起OutOfMemory,使得system_process 进程挂掉。 6.集合中对象没清理造成的内存泄漏 我们通常把一些对象的引用加入到了集合中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大。如果这个集合是static的话,那情况就更严重了。 四、Android中的动画 Android中动画分别帧动画、补间动画和属性动画(Android 3.0以后的) 帧动画 帧动画是最容易实现的一种动画,这种动画更多的依赖于完善的UI资源,他的原理就是将一张张单独的图片连贯的进行播放,从而在视觉上产生一种动画的效果;有点类似于某些软件制作gif动画的方式。在有些代码中,我们还会看到android:oneshot=”false” ,这个oneshot 的含义就是动画执行一次(true)还是循环执行多次。 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/a_0" android:duration="100" /> <item android:drawable="@drawable/a_1" android:duration="100" /> <item android:drawable="@drawable/a_2" android:duration="100" /> </animation-list> 补间动画 补间动画又可以分为四种形式,分别是 alpha(淡入淡出),translate(位移),scale(缩放大小),rotate(旋转)。 补间动画的实现,一般会采用xml 文件的形式;代码会更容易书写和阅读,同时也更容易复用。Interpolator 主要作用是可以控制动画的变化速率 ,就是动画进行的快慢节奏。pivot 决定了当前动画执行的参考位置 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@[package:]anim/interpolator_resource" android:shareInterpolator=["true" | "false"] > <alpha android:fromAlpha="float" android:toAlpha="float" /> <scale android:fromXScale="float" android:toXScale="float" android:fromYScale="float" android:toYScale="float" android:pivotX="float" android:pivotY="float" /> <translate android:fromXDelta="float" android:toXDelta="float" android:fromYDelta="float" android:toYDelta="float" /> <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float" /> <set> ... </set> </set> 属性动画 属性动画,顾名思义它是对于对象属性的动画。因此,所有补间动画的内容,都可以通过属性动画实现。属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等。 五、Android中常用的布局 常用的布局: FrameLayout(帧布局):所有东西依次都放在左上角,会重叠 LinearLayout(线性布局):按照水平和垂直进行数据展示 RelativeLayout(相对布局):以某一个元素为参照物,来定位的布局方式 不常用的布局: TableLayout(表格布局): 每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素(Android TV上使用) AbsoluteLayout(绝对布局):用X,Y坐标来指定元素的位置,元素多就不适用。(机顶盒上使用) 新增布局: PercentRelativeLayout(百分比相对布局)可以通过百分比控制控件的大小。 PercentFrameLayout(百分比帧布局)可以通过百分比控制控件的大小。 六、Android数据存储 使用SharedPreferences存储数据;它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。只能在同一个包内使用,不能在不同的包之间使用。 文件存储数据;文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。 SQLite数据库存储数据;SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。 使用ContentProvider存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。 网络存储数据;通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息。 七、Android中的ANR ANR的全称application not responding 应用程序未响应。 在android中Activity的最长执行时间是5秒。 BroadcastReceiver的最长执行时间则是10秒。 Service的最长执行时间则是20秒。 超出执行时间就会产生ANR。注意:ANR是系统抛出的异常,程序是捕捉不了这个异常的。 解决方法: 1. 运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法 (如onCreate()和onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message 的方式做一些操作,比如更新主线程中的ui等) 2. 应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。 八、 AsyncTask AsyncTask的三个泛型参数说明 1.第一个参数:传入doInBackground()方法的参数类型 2.第二个参数:传入onProgressUpdate()方法的参数类型 3.第三个参数:传入onPostExecute()方法的参数类型,也是doInBackground()方法返回的类型 运行在主线程的方法: onPostExecute() onPreExecute() onProgressUpdate(Progress...) 运行在子线程的方法: doInBackground() 控制AsyncTask停止的方法: cancel(boolean mayInterruptIfRunning) AsyncTask的执行分为四个步骤 1.继承AsyncTask。 2.实现AsyncTask中定义的下面一个或几个方法onPreExecute()、doInBackground(Params…)、onProgressUpdate(Progress…)、onPostExecute(Result)。 3.调用execute方法必须在UI thread中调用。 4.该task只能被执行一次,否则多次调用时将会出现异常,取消任务可调用cancel。 九、Android进程间的通讯 1.activity Activity的跨进程访问与进程内访问略有不同。虽然它们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activity的 Class对象,而需要指定的是要访问的Activity所对应的Action(一个字符串)。有些Activity还需要指定一个Uri(通过 Intent构造方法的第2个参数指定)。 在android系统中有很多应用程序提供了可以跨进程访问的Activity,例如,下面的代码可以直接调用拨打电话的Activity。 IntentcallIntent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:12345678"); startActivity(callIntent); 2. Content Provider Android应用程序可以使用文件或SqlLite数据库来存储数据。Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)。应用程序可以利用Content Provider完成下面的工作 1. 查询数据 2. 修改数据 3. 添加数据 4. 删除数据 3.广播(Broadcast) 广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。在应用程序中发送广播比较简单。只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。 4.Service 1.利用AIDL Service实现跨进程通信 这是我个人比较推崇的方式,因为它相比Broadcast而言,虽然实现上稍微麻烦了一点,但是它的优势就是不会像广播那样在手机中的广播较多时会有明显的时延,甚至有广播发送不成功的情况出现。 注意普通的Service并不能实现跨进程操作,实际上普通的Service和它所在的应用处于同一个进程中,而且它也不会专门开一条新的线程,因此如果在普通的Service中实现在耗时的任务,需要新开线程。 要实现跨进程通信,需要借助AIDL(Android Interface Definition Language)。Android中的跨进程服务其实是采用C/S的架构,因而AIDL的目的就是实现通信接口。

优秀的个人博客,低调大师

Android--面试中遇到的问题总结(二)

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/56480392 一、开发中都使用过哪些框架、平台 EventBus(事件处理) xUtils(网络、图片、ORM) JPush(推送平台) 友盟(统计平台) 有米(优米)(广告平台) 百度地图 bmob(服务器平台、短信验证、邮箱验证、第三方支付) 阿里云 OSS(云存储) ShareSDK(分享平台、第三方登录) Gson(解析 json 数据框架) imageLoader (图片处理框架) zxing (二维码扫描) anroid-asyn-http(网络通讯) DiskLruCache(硬盘缓存框架) Viatimo(多媒体播放框架) universal-image-loader(图片缓存框架) 讯飞语音(语音识别) 二、怎样对 android 进行优化? 对 listview 的优化。 对图片的优化。 对内存的优化。 具体一些措施 尽量不要使用过多的静态类 static 数据库使用完成后要记得关闭 cursor 广播使用完之后要注销 三、即时通讯是是怎么做的? 使用asmark 开源框架实现的即时通讯功能.该框架基于开源的 XMPP 即时通信协议,采用 C/S 体系结构,通过 GPRS 无线网络用 TCP 协议连接到服务器, 以架设开源的Openfn’e 服务器作为即时通讯平台。 客户端基于 Android 平台进行开发。负责初始化通信过程,进行即时通信时,由客户端负责向服务器发起创建连接请求。系统通过 GPRS 无线网络与 Internet 网络建立连接,通过服务器实现与Android 客户端的即时通信脚。 服务器端则采用 Openfire 作为服务器。 允许多个客户端同时登录并且并发的连接到一个服务器上。服务器对每个客户端的连接进行认证,对认证通过的客户端创建 会话,客户端与服务器端之间的通信就在该会话的上下文中进行。 四、 android fragment和activity的区别 Fragment是到Android3.0+ 以后,Android新增了Fragments,在没有 Fragment 之前,一个屏幕只能放一个 Activity。这是一个起源时间大家要知道是什么时候开始引入的。 .Activity 代表了一个屏幕的主体,而Fragment可以作为Activity的一个组成元素。一个Activity可以有若干个(0或n)Fragment构成。你可以把Fragment想象成Activity中的一个控件,只不过相对于一般控件,Fragment与Activity联系更为紧密,随着Activity的生命周期变化,Fragment也随之相应不同的生命周期函数。Fragment 从功能上讲相当于一个子活动(Activity),它可以让多个活动放到同一个屏幕上,也就是对用户界面和功能的重用,因为对于大屏设备来说,纯粹的 Activity 有些力不从心。 Fragment 像是一个子活动,但是 Fragment 不是 Activity 的扩展,因为 Fragment 扩展自 android.app 中的 Object,而 Activity 是 Context 的子类。Fragment 有自己的视图层级结构,有自己的活动周期,还可以像活动一样响应后退按钮,Fragment 还有一个用作其初始化参数的包(Bundle),类似 Activity,Fragment 也可由系统自动保存并在以后还原。当系统还原 Fragment 时,它调用默认的构造函数(没有参数),然后将此Bundle还原到新创建的 Fragment 中,所以无论新建还是还原 Fragment,都要经过两个步骤:(1)调用默认构造函数(2)传入新的或者保存起来的Bundle。 一个Activity可以运行多个 Fragment,Fragment 切换时,由 FragmentTransaction 执行,切换时,上一个 Fragment 可以保存在后退栈中(Back Stack),这里的后退栈由 FragmentManager 来管理,注意 Fragment 和 Activity 的后退栈是有区别的:Activity 的后退栈由系统管理,而 Fragment 的后退栈由所在的Activity 管理。 Fragment不能脱离Activity而存在,只有Activity才能作为接收intent的载体。其实两者基本上是载体和组成元素的关系。 Fragment用来描述一些行为或一部分用户界面在一个Activity中,你可以合并多个fragment在一个单独的activity中建立多个UI面板,同时重用fragment在多个activity中.你可以认为fragment作为一个activity中的一节模块,fragment有自己的生命周期,接收自己的输入事件,你可以添加或移除从运行中的activity.一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响,举个例子吧,当activity暂停,那么所有在这个activity的fragments将被destroy释放。然而当一个activity在运行比如resume时,你可以单独的操控每个fragment,比如添加或删除。不过因为Fragment和Activity的生命周期都比较复杂,我们分别对比下:创建一个fragment你必须创建一个Fragment的子类或存在的子类,比如类似下面的代码 public static classAndroidFragmentextendsFragment{ @Override publicView onCreateView(LayoutInflaterinflater, ViewGroupContainer, Bundle savedInstanceState) {returninflater.inflate(R.layout.android_fragment,container,false); } } Fragment类的一些代码看起来有些像Activity为了让大家了解清楚,Android开发网给大家整理下 Fragment的生命周期大家可以参考一下网上关于生命周期的介绍 http://www.cnblogs.com/purediy/p/3276545.html,部分类似Activity的,我们详细解释 onCreate()当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的 onCreateView()当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI. 那么如何添加一个Fragment到Activity中呢? Activity的布局可以这样写 <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragmentandroid:name="com.android.cwj.ArticleListFragment"android:id="@+id/list"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent"/><fragmentandroid:name="com.android.cwj.ArticleReaderFragment"android:id="@+id/viewer"android:layout_weight="2"android:layout_width="0dp"android:layout_height="match_parent"/></LinearLayout>

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册