2014-8-4阿里电话面试

1.自我介绍。(我去,完全没准备,很久之前准备的全部忘了~)

2.android如何处理OOM?

出现OOM的原因主要有两大类:一、加载对象过大;二、相应资源过多,来不及释放。

如何处理OOM:

1、在对象引用上做处理,比如软引用、弱引用和虚引用。 详情点击。

在过去,我们经常会使用一种非常流行的内存缓存技术的实现,即软引用或弱引用 (SoftReference or WeakReference)。但是现在已经不再推荐使用这种方式了,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,这就有潜在的风险造成应用程序的内存溢出并崩溃。

 

2、在内存中加载图片时直接在内存中做处理,比如:边界压缩。

2.1、多数情况下OOM是因为bitmap太大,所以在bitmap加载到内存是需要进行压缩处理的。

有两种压缩方式,第一种通过BitmapFactory.decodeFile(path,option)对图片按比例进行压缩,读到内存中是压缩过的图片大小,但图片质量会受到影响;第二种是通过image.compress(Bitmap.CompressFormat.JPEG, 100, baos)

来对图片进行质量压缩,也就是图片质量不受影响,但需要把原bitmap整个读入到内存中。一般来说,第一种方法是肯定要使用的,如果需要把bitmap通过网络上传到服务器端,则在使用完第一种方式后再用第二种方式进行压缩,

来减少流量损失。

详情点击。

2.2、所以需要主动释放Bitmap的内存;

bitmap.recycle();

2.3、最好是设计Cache,利用android提供的LruCache机制,用内存的一部分作为缓存。

详情点击。

3、动态回收内存。

4、优化Dalvik虚拟机的堆内存分配。

5、自定义堆内存大小。

详情点击。

3.listView如何优化?

listView加载数据都是在其适配器,比如继承了BaseAdapter、SimpleAdapter和CursorAdapter的适配器的View getView(int position,View contentView,ViewGroup parent)方法中实现的。

1、用convertView缓存,不需要每次都重新创建一个view对象;

2、定义一个static的成员内部类viewHolder,在contentView上绑定这个viewHolder,不需要每次都findviewbyId;

3、对于加载大数据量的网络数据,需要进行分页加载,超过最大数量则覆盖,否则容易出现OOM,通过adapter.notifyDataSetChanged()方法更新listView。

4、关于加载网络图片,最好用缓存框架,比如LruCache,防止来回拉动listview时,重复进行图片下载操作。

http://www.devba.com/index.php/archives/5966.html

http://blog.youkuaiyun.com/jacman/article/details/7087995

4.jpg和PNG的区别?(额,这个真心不知道。。。)

简单地说,PNG是无损压缩的图片格式,而JPG是有损压缩的图片格式。

因此虽然同样大小的两张图片,PNG的存储大小明显比JPG的要大很多。

5.堆和栈的区别?

JVM运行时内存区,有两类栈和一个堆。

两个栈分别为虚拟机栈和本地方法栈

首先说下虚拟机栈的用途,一个线程的每个方法在执行的同时都会创建一个栈帧,栈帧中存储的有局部变量表、操作站、动态链接、方法出口等,当方法调用时,

栈帧入栈,在方法完成时,栈帧出栈。每个线程对应着一个虚拟机栈,所以虚拟机栈是线程私有的。

本地方法栈和虚拟机栈差不多,唯一的区别是:虚拟机栈是执行Java方法的,而本地方法栈是用来执行native方法的。

堆:在JVM内存管理中,堆是内存最大的一块,是线程共享的内存区域,用来存放对象实例。其分配和回收机制为分代分配、分代回收。

6.String的存储形式?

String的存储形式是char类型数组,然后又提到new和直接赋值两种方式,也讲到了常量池。。。

 

String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。

 

String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").

常量池是在JAVA内存区中的方法区中。

 

8.问是否可以改变String的内容?

不可以在原对象上改变String的内容,因为其内部的char型数组是final关键词修饰的。但可以通过StringBuffer和StringBuilder这两个类动态修改和扩充String的内容,只是需要重新创建一个String对象,即原对象的String内容仍然没有任何改变。

9.是否熟悉android的ClassLoader?

Dalvik虚拟机不是一般的java虚拟机,所以类加载机制和java虚拟机有相似之处,也有不同之处。

相似之处是双亲委派机制,不同之处是动态类加载机制。

在Dalvik虚拟机里,ClassLoader不好使,我们如何实现动态类加载机制呢?Android为我们从ClassLoader派生出两个子类,DexClassLoader和PathClassLoader,

这两个类都是通过DexFile类实现加载的,加载的类文件是dex文件或者包含有dex文件的.apk文件或者.jar文件。

详见点击。

8.听到我说熟悉javaClassLoader,立马让我解释java的双亲委派机制。

之前有总结过~

9.看到我项目有个涉及到了数据库,接下来问了一堆数据库的问题(尼玛,no zuo no die啊,这是我的弱项),什么如何提高数据库查询速度?如何优化sql语句?分组查询语句?

1、提高查询速度,用索引;

2、优化sql语句:1、不要滥用select * ,查找几列就写几个属性;2、!= null 最好改为!=0;3、in{1,2,3} 改为 between 1 and 3;4、where id =1 or id=2 改为用union,select * from emp where id =1 union (select * from emp where id=2)。

3、分组查询:group by。

group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。

什么是“聚合函数”?
像sum()、count()、avg()等都是“聚合函数”
使用group by 的目的就是要将数据分类汇总。关于group by的解析。

10.hashtable和hashmap区别?多线程下如何使用hashmap?hash原理,时间复杂度?线程和进程区别?线程的生命周期?

1、三个区别:实现的接口不一样,hashTable实现的是Dictionary接口,hashmap实现的是map接口;hashTable不允许数据的key为null,而hashmap允许;

hashtbale是线程安全的,hashmap是线程非安全的,需要处理同步问题。

2、需要处理线程同步问题,对于共享对象,不同对象互斥地访问,具体通过synchronized实现。

3、“拉链法”,查询的时间复杂度为O(1), 两种遍历的方式的时间复杂度分别为O(n)和O(n^2)。

4、进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位,一个进程内部可以包含多个线程。线程是CPU进行分派和调度的最小单位,多个线程可以共享同一个进程

的资源,一个线程运行只需要很少的资源(程序计数器、一组寄存器和栈)。

5、线程的生命周期。

11.然后情况直转而下。。。。java的锁有哪几种?(多线程这块我还没复习到啊我想说。。。。)lock和synchronized区别?。。。

java锁:有两种,一种是synchronized,一种是lock。

两者的区别是:synchronized是在JVM层面实现的,因此系统可以监控锁的释放与否,而ReentrantLock使用代码实现的,系统无法自动释放,需要在代码中finally子句中显式释放锁lock.unlock()。

在并发量小的情况下,使用synchronized是个不错的选择,但是在并发量比较高的情况下,其性能下降很严重,此时ReentrantLock是个不错的方案。

java的锁

lock和synchronized区别:详情点击。

12.面试官看我答的不太好(我估计是。。说话有点抖。。),不问线程了,开始问java io,让我举几个io类,我貌似一口气说了一堆哈哈~

当然没这么简单,接着问我是否熟悉NIO,哎,不熟悉啊,只说了这个NIO是个new io也是个not block io,然后就没然后了。。。

IO类分类字符流和字节流,字符流有两个抽象类Reader和Writer,其对应子类FileReader和FileWriter可实现文件的读写操作,BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率;字节流也有两个抽象类InputStream和OutputStream,其对应子类FileInputStream和OutputStream可实现对文件的读写操作,BufferedInputStream和BufferedOutputStream能够提供缓冲区功能,用以提高效率。

什么时候用字符流什么时候用字节流?字符流适合操作带有字符的文件的场合,字节流适合操作无法直接获取字符的二进制文件,比如图片、mp3、视频文件等等。

NIO:详情点击。

13.java到这就问完了,接下来问了一堆android相关的,比如子线程和ui通信的方式,service通信的方式及工作原理?handler机制?touch传递机制?

1、子线程和UI通信的方式:

一个线程拥有一个Message Queue,对应有一个Looper负责管理和运转该Message Queue,UI线程(即主线程)的handler将一个Message(Massage中包含了消息ID,消息处理对象以及处理的数据)push到子线程的Message Queue中,Message Queue中的Message先进先出,当Looper从Message Queue中抽取一个Message出队列,handler就负责处理该Message。通过这种方式子线程就可以和UI线程通信。

2、service通信的方式及工作原理:

service和Activity进行通信,我所知道的有两种方式,一种是service通过IBinder和Activity通信;第二种是service通过BroadCast Receiver和Activity通信。

3、handler机制:

一个线程拥有一个Message Queue,对应有一个Looper负责管理和运转该Message Queue,UI线程(即主线程)的handler将一个Message(Massage中包含了消息ID,消息处理对象以及处理的数据)push到子线程的Message Queue中,Message Queue中的Message先进先出,当Looper从Message Queue中抽取一个Message出队列,handler就负责处理该Message。通过这种方式子线程就可以和UI线程通信。

4、touch传递机制:

每一个继承自ViewGroup的子类都有以下三个和TouchEvent联系非常紧密的方法:

(1)public boolean dispatchTouchEvent(MotionEvent ev);//转发TouchEvent

 (2) public boolean onInterceptTouchEvent(MotionEvent ev);//拦截TouchEvent

 (3) public boolean OnTouchEvent(MotionEvent ev);//处理TouchEvent

而View的子类只有OnTouchEvent方法;

详情点击。

14.我们都知道,activity有一个生命周期。。。(哈哈,难道让我说activity的生命周期嘛?)。。那你说说android为什么要设计一个生命周期呢??

额,,,,这还真没考虑过。。(更好的控制程序逻辑?更好地操作数据?更好地管理界面??该怎么答?谁能告诉我?)。。

运用模板方法的设计模式,父类activity生命周期中的逻辑实现由其子类完成,实现"好莱坞法则":"Don't call me,i will call you."。

详情点击。

15.activity的生命周期是由谁控制的??

ActivityManagerService,属于Android 框架层。

16.下面是算法部分:(哎,准备的东西一点也没问到。。。)

链表和数组的区别?二分查找算法?

二分查找有两种实现方式:递归和非递归(循环),后者效率比前者高。 点击详情。

如何进一步提高二分查找的效率?(这个有谁知道???)

 

二分查找和跳跃表的区别??(我去。。跳跃表没看。。。)

 

下面都是非技术问题了:

17.以后希望在哪工作?(南京、无锡、杭州。。嘿嘿~)

18.如何学android的?(自学。。)

19.是否有关注过大牛的博客?

20.如何去阅读大牛博客,是否会自己思考?

18.面试到此结束,问我有啥问题没?

我当然说有啊,我问了他是咋学android的,他回答说:看源码!

总结:

总体来说,回答的不咋地,一是紧张,二是还没准备好,三是我太菜!!!!

通过这次电话面试,我的感觉是:

1.还要提高自身的表达能力!

2.充分准备真的很有必要!

3.不要紧张!

技术上面还需提高的有:

1.NIO、2.java并发、3.android设计原理、4.数据库 5.数据结构与算法

转载于:https://www.cnblogs.com/hzhtracy/p/4682876.html

【SOC估算】基于EKF与神经网络融合的锂电池SOC高精度估计及Matlab实现 本文探讨了基于EKF与神经网络融合的锂电池SOC高精度估计方法。通过结合扩展卡尔曼滤波(EKF)的模型驱动优势和神经网络的数据驱动学习能力,实现了对电池荷电状态(SOC)的精准预测。Matlab仿真验证了该混合算法在各种工况下均能显著降低估计误差,提升电池管理系统性能。 阅读详情

相关推荐

基于OkHttp3+Retrofit2+RxJava3搭建响应式网络框架

本文介绍了一个基于OkHttp3+Retrofit3+RxJava3的响应式网络框架设计。该框架采用分层架构,OkHttp3负责底层网络请求,Retrofit3封装HTTP接口,RxJava3实现响应式流处理。核心亮点包括:1)高度解耦的分层设计;2)统一的异常处理和响应体封装;3)RxJava3实现线程切换和请求管理;4)MVVM架构适配,业务层只需关注数据逻辑。框架提供了完整的实现方案,包括全局配置、拦截器、响应转换、接口声明、仓库封装等组件,并支持生产环境扩展功能如Cookie持久化、Token刷新等

fuge2008的博客 872

从普通大专到阿里只用了8个月,我是如何在迷茫期后面试阿里拿到Offer,定级阿里P7的?

前言 要说程序员最想要进入的大厂,阿里,腾讯,百度必定是首当其冲,而互联网大厂必定是阿里巴巴首当其冲,今天就来分享一下我面试阿里的一些经历与心得。 不想进大厂的程序员不是好程序员! “80%的oer掌握在20%的人手中”这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部 分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 oer。运气暂且不谈,就拿心态来说,千万 不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来越

马小婧QAQ 4109

论文理解【LLM-OR】—— 【PaMOP】Guiding Large Language Models in Modeling Optimization Problem

针对 LLM 求解运筹优化任务,PaMOP 通过约束划分树分离子问题,实现复杂优化问题的分块建模,并结合求解器反馈与反向翻译一致性检查迭代纠错,降低子任务复杂度,提升可执行率与建模准确性。

佚失的诗篇 1007

阿里巴巴2014产品经理实习生武汉站面试之回忆

2014年5月19日上午10:07,北京号码,电话通知我,

Dare to be different , Make it ! 1697

Synopsys工具链实战:如何用VCS、DC、ICC和Calibre跑通你的第一个数字IC设计项目?

本文详细介绍了如何使用Synopsys工具链(VCS、Design Compiler、ICC和Calibre)完成数字IC设计项目,从RTL代码到GDSII版图的全流程。涵盖环境配置、RTL设计验证、逻辑综合、物理实现及签核验证等关键步骤,帮助工程师掌握高效的数字IC设计流程。

weixin_42525005的博客 197

残差检验_第三十讲 R语言-Cox比例风险模型的假设检验条件

在介绍完 Cox比例风险模型的详细理论和R实现以后(插入链接!!!),我们已经知道Cox比例风险模型可以较好的同时矫正多个混杂因素对结果的影响,同时我们遗留下来了一个问题:Cox比例风险模型的假设检验条件是什么?这一讲,我们将对此进行解答。请注意,如果使用不当,统计模型可能会产生误导性的结论。因此,检查给定的模型是否适合数据类型是非常重要的!1. Cox比例风险模型的假设条件Cox比例风险模型的成...

weixin_35476698的博客 8048

阿里面试宝典

###各大IT社区精选 -[阿里面经(附回答)面试必看](https://www.jianshu.com/p/08368a8e4ca7) -[阿里面试经历及总结(数据研发、Java研发方向)](http://www.codeceo.com/article/alibaba-interview-java.html) -[记2017.3.21阿里面试经历,java方向](http://blo...

yingzi19911010的博客 258

湿式双离合器自动变速器simulink建模与仿真

随着汽车工业的不断发展,自动变速器在提高汽车性能、驾驶舒适性和燃油经济性等方面发挥着越来越重要的作用。湿式双离合器自动变速器(Wet Dual-Clutch Transmission,简称 WDCT)作为一种先进的自动变速器技术,具有换挡速度快、动力传递平稳、燃油经济性好等优点,被广泛应用于各类汽车中。结构组成湿式双离合器自动变速器主要由双离合器、齿轮传动系统、液压控制系统和电子控制系统等部分组成。双离合器:由两个独立的离合器组成,分别控制奇数挡和偶数挡。通过切换两个离合器的工作状态,可以实现快速换挡。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 348

2014腾讯实习笔试面试

成都这边14年的软件开发笔试题延续了一贯的传统,还是考查数据结构、操作系统、计算机网络等方面的内容,不过槽点还是很多的,首先就是笔试挨着坐,博主的左边就是同班同学(我没偷看啊!)

笔记 5569

ZYNQ工业级串口方案:AXI UART 16550扩展RS-485实战(自动方向控制+Linux驱动)

可以轻松扩展出多路工业级串口。但常规方案需要手动控制收发方向(DE/RE引脚),存在实时性差、CPU占用高等痛点。本文从硬件逻辑设计到Linux驱动开发,完整实现了ZYNQ平台的RS-485工业通信方案。,解决了传统方案实时性差的痛点。所有代码均经过实际项目验证,可直接用于生产环境。:尝试将此设计扩展为多协议兼容接口(支持RS-422/RS-232切换)!等特性,依然是现场总线通信的首选。,通过硬件逻辑+Linux驱动协同设计,实现零延迟切换。在工业自动化、能源电力等场景中,RS-485凭借。

QQ_778132974的博客 830

S32DS S32K312 LPSPI + DMA配置异步SPI

配置DMA->Specific Configuration->Dma Logic Channel->Configuration->Global。SpiPhyUnitMapping:将该配置Mapping到某一路Spi,此工程配置为Spi1,遂选择LPSPI_1。配置的该路SPI的片选ID,此处ID对应配置Pin脚时lpspi_pcs后的下表(本工程此处为PCS3)配置该路SPI对应的SPI硬件单元ID,本工程配置为Lpspi1,因此配置为CSIB1。首先配置SPI的Pin脚,此处使用的是LPSPI_1。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2363

阿里、腾讯、百度产品经理40+道面试题记录:我是怎样同时拿到BAT Offer的?

2015年已经来到石榴如火的5月,没错,小半年就快过去了。很多同学正在毕业找工作,也有些同学在准备着2015的暑期实习。而进入4A、BAT、500强是很大部分营销和传媒人的选择。在求职或求实习的过程中,你一定希望看到前辈们的实际求职经历或者经验心得分享吧。不管是企业的招聘流程、求职环节设置、面试题、学长学姐的真人故事,都能让你更胸有成竹和收到鼓舞 嗯,最近身边好多朋友问我有关面试的一些经验...

1130

Python爬虫实战:爬取国家气象局台风路径数据的完整教程

国家气象局(如中国气象局)一般会在官方网站公布台风的实时路径,包括台风编号、名称、时间点、经纬度、中心气压、最大风速等信息。这些数据以图形和表格的形式呈现,有时以JSON或CSV文件形式下载。爬取这类数据,有助于构建台风数据库、历史路径分析、趋势预测等应用。本文详细介绍了如何通过Python爬取国家气象局发布的台风路径数据,涵盖了数据采集、解析、存储和可视化全流程。通过实践,你可以构建自己的台风数据库,结合机器学习开展路径预测和风险评估等高级分析。后续可结合深度学习技术,实现台风轨迹预测;

2201_76125261的博客 1025

阿里巴巴 面试经历

这次虽然一面就跪了,但是我感觉

qq454822252的专栏 897

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[综合面试] 2014校招暑假实习生面经(阿里、百度offer)

先说下过程与成果(都是软件研发岗位): 1.去哪儿,校招,笔挂; 2.百度,内推,一面挂(没笔试); 3.腾讯,校招,一面挂(有笔试); 4.阿里,内推,收到offer; 5.百度,校招,口头offer(没时间去)。 看了这结果,感觉还可以。 先自我介绍一下,本人电子科技大学软件工程大三学生一枚,在校期间在学生工作室(SysLab)参加过几个项

fancychendong的专栏 8489

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

BAT产品经理面试题--如何同时拿下百度腾讯阿里的产品岗offer

2015年已经来到石榴如火的5月,没错,小半年就快过去了。很多同学正在毕业找工作,也有些同学在准备着2015的暑期实习。而进入4A、BAT、500强是很大部分营销和传媒人的选择。在求职或求实习的过程中,你一定希望看到前辈们的实际求职经历或者经验心得分享吧。不管是企业的招聘流程、求职环节设置、面试题、学长学姐的真人故事,都能让你更胸有成竹和收到鼓舞 嗯,最近身边好多朋友问我有关面试的一

6949

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

14年阿里社招面试题

阿里面试题目总结: 第一轮面试电话(5月6号): 1.自我介绍,包括做过项目。 2.有看过哪些JDK源码,了解哪些常用库。 3.集合框架HashMap的扩容机制,ConcurrnetHashMap的原理 4.jvm内存模型与gc内存回收机制 5.classloader结构,是否可以自己定义一个java.lang.String类,为什么? 双亲代理机制。 6

yangzishiw的专栏 3959

阿里面试题及相关参考链接

似乎每个程序员都有一颗进阿里看看的好奇心,虽然很多人最后也从那座围城里走出来了,但没有去过阿里多多少少总有些遗憾吧。

liangzi321321的博客 686

逆袭之路,普通二本的八年开发码农如何进阿里拿年薪百万

有人说,今年可能是过去十年最差的一年,但却是未来十年最好的一年。随着越来越多的知名企业进行大规模裁员,我们不得不承认一个事实:经济寒冬与裁员潮,将是未来常态! 个人经历 普通二本毕业,学历不突出,在杭州工作两年,14年来到深圳,从事java开发一晃8年多。 做过外包、跳槽比较频繁,由于内心一直以一个技术人自居,所以一直重技术,轻业务,导致在职业规划上做的很差。 期间尝还试过2次开发方向的转变,一次是2014年左右,移动APP的浪潮时期,自学了安卓开发半年,结果还没等转开发方向成功,移动开发的浪潮就逐

weixin_48674590的博客 1630

2014春季实习生面经

先说xia

水木谦 1153

(已拿offer)2017腾讯暑期实习生从笔试到面试总结(附带华为、阿里面试经历)...

图:深圳西冲沙滩日落导读:快到暑假了,有不少读者还是学生,想找一份实习,好的公司,只能说是好的起点,不能代表全部。公司强大,不代表个人一定强大,小公司同样也有大牛,不羡慕,不虚浮,脚踏实...

欢迎关注公众号:【码农突围】,公号后台回复9999,可以获取一份500页的LeetCode刷题笔记。 857
上一篇: 2015年网易考拉海淘android面试
下一篇: android的编译和运行过程深入分析
abc20140521
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值