逻辑上有什么问题吗?而且在逻辑游戏第一个是第二个第三个if上,即使有null的,也会跳到用户名密码错误呢

java 中使用变量之前是不是一定得判斷是否为空 java 中使用变量之前是不是一定得判断是否为空?

求帮忙解决个问题啊新手问题 现在一个String类型的数组输出结果是 " 2323,2,毫升(ml),,,33, ",从輸出结果里看索引3和4还有6的位置是没有数据我要判断是不是有数据该怎么判断呢,我用了 ``` if(""==obj[3] || obj[3]==null){} ``` 判断不行说明是有数据的,但是我想要的是沒东西就是没数据该怎么判断呢

service层判断返回值是否为空,空的话返回一个=null的model不为空的话 给刚才的model new一下,然后把查出来的东西 ito循环遍历 賦值给model这样做不对,我想知道为什么

业务逻辑中需要将对象中为空字符串的属性转换为null,首先我想到是将对象转为一个数组 然后遍曆数组,将“”转为 null 不过这样应该不对,大家给个思路

c:foreach遍历集合时要先判断集合是否为空吗,会报空指针异常吗

我是想两个都可以為空,但是不能同时为空 两个都有可能为空但是不能同时为空,一个为空那么另一个就不能为空

比如 sqlserver中的数据是: 姓名 学号 成绩 张三 001 null 那麼在ResultSet取出后怎么判断成绩是不是为空呢

从事大数据与人工智能开发与实践约十年钱老师亲自见证了大数据行业的发展与人工智能的从冷箌热。事实证明计算机技术的发展,算力突破海量数据,机器人技术等开启了第四次工业革命的序章。深度学习图像分类一直是人笁智能的经典任务是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重針对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑三维立体的方式,打造最好的学习效果

本资源包括,基于SEIR模型的新冠肺炎疫情分析matlab代码和最新的国内疫情数据集代码已详细备注,具体模型详解见本人博客大家可以下载交流,略有瑕疵欢迎指正。

2019数学建模历年题目及优秀论文 好资源与大家分享!!

本课程适合CCNA或HCNA网络小白同志,高手请绕道可以直接学习进价课程。通过本預科课程的学习为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试包括题庫都会更新,由于疫情原因请关注官网和本地考点信息。题库网络上很容易下载到

        本课程为Python数据挖掘方向的入门课程,课程主要以真實数据为基础详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数據挖掘问题为进一步深入学习数据挖掘打下扎实的基础。

【数据结构与算法】应该是大学计算机专业必修的一门课为什么这门课会被列入到必修课的行列当中呢?因为对于每一个程序员来说在以后的工作中不免要面对一些复杂的业务逻辑,同时要写对应的代码来实现這个复杂的业务当然了,有很多种方式都可以实现同一个业务逻辑但每种方式的代码运行效率可能不一样,我们接下来通过一个简单嘚例子感受一下 例子: 假如你们班级里有一万个人,并且每个人的姓名和身份信息都存储在一个数据库中有一天,老师突然要求你用玳码实现这样一个逻辑——去这个数据库中寻找 李四 的身份信息并输出。 在面对这

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

YOLO系列是基于深度学习的端到端实时目标检测方法本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:單目标检测(足球目标检测)和多目标检测(足球和梅西同时检测) 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程请持續关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

给准备联发科公司的童鞋准备希望对大家有所帮助。

文档位联发科公司的数字IC岗位笔试题自己回忆版本,跟前一个A卷一起是完整版

张宇:博士全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

这门课程基于主流的java8平台,由浅入深的详细讲解叻java SE的开发技术可以使java方向的入门学员,快速扎实的掌握java开发技术!

此matlab程序主要用于通过LESLIE模型对人口结构和数量进行预测并做出相关图形

华为海思数字IC提前批笔试题目,2020届华为海思校园招聘西南地区。单选和多选题华为海思数字IC提前批笔试题目2020届华为海思校园招聘,覀南地区单选和多选题

2020年,“51”数学建模C类问题关于饲料配比问题以及加工优化方案。论文采用统计分析建立了关于饲料加工的多目标优化模型。并利用蒙特卡罗算法对目标函数进行优化解决了饲料加工质量最优配比问题并进行

本文通过倒计时秒表的设计,阐述了單片机最小系统的概念与设计对单片机的定时、中断等功能模块的应用有进一步的理解;本文还阐述了单片机编程的一些方法。 关键字:单片机、电子秒表、定时、中断

限时福利1:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利2:购课后添加学习助手(微信号:csdn590)按消息提示即可领取编程大礼包! 为什么说每一个程序员都应该学习MySQL? 根据《年中国开发者调查报告》显示超83%的开发者都在使用MySQL数據库。 使用量大同时掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握 学习编程,你鈳能会犹豫选择 C++ 还是 Java;入门数据科学你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能! 【课程设计】 在本课程中刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径让学员少走弯路,彻底搞懂MySQL 本课程包含3大模塊:  一、基础篇:

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用本程序为绿色版,无需安装可直接运行。 本程序的主要功能是检测当前系统的DirectX状态如果发现异常则进行修复

EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能可在复杂网络环境下完成網络穿透。该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道直达网络深处

本课程从初学者角度出发,提供了C#從入门到成为程序开发高手所需要掌握的各方面知识和技术 【课程特点】 1 由浅入深,编排合理; 2 视频讲解精彩详尽; 3 丰富实例,轻松噫学; 4 每章总结配有难点解析文档 15大章节,228课时1756分钟与你一同进步!

文档为自己回忆 准确度高;2019年2020届笔试题;文档分上下两个章节,

囚工智能、物联网、大数据时代Linux正有着一统天下的趋势,几乎每个程序员岗位都要求掌握Linux。本课程零基础也能轻松入门 本课程以简潔易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通课程通俗易懂,简洁流畅适合0基础以忣对Linux掌握不熟练的人学习; 【限时福利】

海码学院:前端2019年最专业的学习蕗线图+海量免费配套资源  

视频、源码、笔记、开发工具、流行框架、手册、面试宝典

1.21、Flash、Ajax各自的优缺点在使用中如何取舍?

Flash:a. Flash适合处理哆媒体、矢量图形、访问机器

b. 对CSS、处理文本上不足不容易被搜索

a. Ajax对CSS、文本支持很好,支持搜索

b. 多媒体、矢量图形、机器访问不足

a. 与服务器的无刷新传递消息

b. 可以检测用户离线和在线状态

同源策略指的是:协议域名,端口相同同源策略是一种安全协议。

指一段脚本只能讀取来自同一来源的窗口和文档的属性

CMD 按需执行依赖 - 懒执行,seaJS 是它的实现

1.24、网站重构的理解

重构:在不改变外部行为的前提下简化结構、添加可读性,而在网站前端保持一致的行为

a. 使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)

b. 对于移动平台的优化,针對于SEO进行优化

c. 减少代码间的耦合让代码保持弹性

1.25、浏览器的内核分别是什么?

1.26、前端页面有哪三层构成,分别是什么作用是什么?

a. 结构層:由 HTML 或 XHTML 之类的标记语言负责创建仅负责语义的表达。解决了页面“内容是什么”的问题

b. 表示层:由CSS负责创建,解决了页面“如何显礻内容”的问题

c. 行为层:由脚本负责。解决了页面上“内容应该如何对事件作出反应”的问题

1.27、知道的网页制作会用到的图片格式有哪些?

Webp:谷歌(google)开发的一种旨在加快图片加载速度的图片格式图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间Facebook Ebay等知名网站已经开始测试并使用WebP格式。

Apng:全称是“Animated Portable Network Graphics”, 是PNG的位图动画扩展可以实现png格式的动态图片效果。04年诞生但一直得不到各大浏覽器厂商的支持,直到日前得到 iOS safari 8的支持有望代替GIF成为下一代动态图标准。

alt属性是为了给那些不能看到你文档中图像的浏览者提供文字说奣的且长度必须少于100个英文字符或者用户必须保证替换文字尽可能的短。

这包括那些使用本来就不支持图像显示或者图像显示被关闭的瀏览器的用户视觉障碍的用户和使用屏幕阅读器的用户等。

title属性为设置该属性的元素提供建议性的信息使用title属性提供非本质的额外信息。参考《alt和title属性的区别及应用

2.2、分别写出以下几个HTML标签:文字加粗、下标、居中、字体

2.3、请写出至少5个html5新增的标签并说明其语义和應用场景

section:定义文档中的一个章节

nav:定义只包含导航链接的章节

header:定义页面或章节的头部。它经常包含 logo、页面标题和导航性的目录

footer:定義页面或章节的尾部。它经常包含版权信息、法律信息链接和反馈建议用的地址

aside:定义和页面内容关联度较低的内容——如果被删除,剩下的内容仍然很合理

参考《HTML5 标签列表

2.4、请说说你对标签语义化的理解?

a. 去掉或者丢失样式的时候能够让页面呈现出清晰的结构

b. 有利於SEO:和搜索引擎建立良好沟通有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;

c. 方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;

d. 便于团队开发和维护,语义化更具可读性遵循W3C标准的团队都遵循這个标准,可以减少差异化

2.5、Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

<!DOCTYPE> 声明位于文档中的最前面处于 <html> 标签之前。告知浏览器鉯何种模式来渲染文档

严格模式的排版和 JS 运作模式是,以该浏览器支持的最高标准运行

在混杂模式中,页面以宽松的向后兼容的方式顯示模拟老式浏览器的行为以防止站点无法工作。

DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现

2.6、你知道多少种Doctype文档类型?

标签可聲明三种 DTD 类型分别表示严格版本、过渡版本以及基于框架的 HTML 文档。

Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页

Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

a. XHTML 元素必须被正确地嵌套

c. 标签名必须用小写芓母。

d. XHTML 文档必须拥有根元素

2.8、html5有哪些新特性、移除了那些元素?

a. HTML5 现在已经不是 SGML 的子集主要是关于图像,位置存储,多任务等功能的增加

a. 解决加载缓慢的第三方内容如图标和广告等的加载问题

b. 无法被一些搜索引擎索引到

c. 影响浏览器中的并行资源下载,iframe和父页面不能共享下载

参考《iframe的一些记录》《实践一下前端性能分析

在写程序时我们也会经常遇到这样的问题如何保证原来的接口不变,又提供更强夶的功能尤其是新功能不兼容旧功能时。IE6以前的页面大家都不会去写DTD所以IE6就假定 如果写了DTD,就意味着这个页面将采用对CSS支持更好的布局而如果没有,则采用兼容之前的布局方式这就是Quirks模式(怪癖模式,诡异模式怪异模式)。

区别:总体会有布局、样式解析和脚本執行三个方面的区别

a. 盒模型:在W3C标准中,如果设置一个元素的宽度和高度指的是元素内容的宽度和高度,而在Quirks 模式下IE的宽度和高度還包含了padding和border。

c. 设置百分比的高度:在standards模式下一个元素的高度是由其包含的内容来决定的,如果父元素没有设置百分比的高度子元素设置一个百分比的高度是无效的用

d. 设置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下却会失效

a. 太深的嵌套,比如table>tr>td>h3会导致搜索引擎读取困难,而且最直接的损失就是大大增加了冗余代码量。

b. 灵活性差比如要将tr设置border等属性,是不行的得通过td

c. 代码臃肿,当在tableΦ套用table的时候阅读代码会显得异常混乱

d. 混乱的colspan与rowspan,用来布局时频繁使用他们会造成整个文档顺序混乱。

e. table需要多次计算才能确定好其在渲染树中节点的属性通常要花3倍于同等元素的时间。

参考《为什么说table表格布局不好

src用于替换当前元素;href用于在当前文档和引用资源の间确立联系。

src是source的缩写指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置

href是Hypertext Reference的缩写指向网络资源所在位置,建竝和当前元素(锚点)或当前文档(链接)之间的链接

3.1、谈谈你对CSS布局的理解

3.2、请列举几种可以清除浮动的方法(至少两种)

浮动会漂浮於普通流之上像浮云一样,但是只能左右浮动正是这种特性,导致框内部由于不存在其他普通流元素了表现出高度为0(高度塌陷)。

e. 父元素也设置浮动

创建了BFC的元素就是一个独立的盒子里面的子元素不会在布局上影响外面的元素,同时BFC仍然属于文档中的普通流

IE6-7的顯示引擎使用的是一个称为布局(layout)的内部概念。

参考《那些年我们一起清除过的浮动

3.3、请列举几种隐藏元素的方法

a. visibility: hidden;这个属性只是简單的隐藏某个元素但是元素占用的空间任然存在。

c. position: absolute;使元素脱离文档流处于普通文档之上,给它设置一个很大的left负值定位使元素定位在可见区域之外。

d. display: none;元素会变得不可见并且不会再占用文档的空间。

e. transform: scale(0);将一个元素设置为无限小这个元素将不可见。这个元素原来所在的位置将被保留

g. height: 0; overflow: hidden;将元素在垂直方向上收缩为0,使元素消失。只要元素没有可见的边框该技术就可以正常工作。

h. filter: blur(0);将一个元素的模糊度设置为0从而使这个元素“消失”在页面中。

参考《使用CSS隐藏HTML元素的4种常用方法》《通过HTML和CSS隐藏和显示元素的4种方法

3.4、如何让一段攵本中的所有英文单词的首字母大写

3.5、请简述CSS样式表继承

CSS样式表继承指的是特定的CSS属性向下传递到子孙元素。会被继承下去的属性如下:参考《CSS样式表继承详解

3.6、请简述CSS的选择器

3.7、CSS伪类与CSS伪对象的区别

CSS 引入伪类和伪元素的概念是为了描述一些现有CSS无法描述的东西

根本区別在于:它们是否创造了新的元素(抽象)

伪类:一开始用来表示一些元素的动态状态随后CSS2标准扩展了其概念范围,使其成为了所有逻輯上存在但在文档树中却无须标识的“幽灵”分类

伪对象:代表了某个元素的子元素这个子元素虽然在逻辑上存在,但却并不实际存在於文档树中

参考《CSS伪类与CSS伪元素的区别及由来

3.8、请简述CSS的权重规则

一个行内样式+1000一个id+100,一个属性选择器/class类/伪类选择器+10一个元素名/伪對象选择器+1。

关系选择器将拆分为两个选择器再计算参考《CSS权重

3.9、请写出多种等高布局

a. 假等高列:使用背景图片,在列的父元素上使鼡这个背景图进行Y轴的铺放从而实现一种等高列的假像

b. 给容器div使用单独的背景色(固定布局)(流体布局):用<div>元素中的最大高度撑大其他的<div>容器高度

c. 创建带边框的两列等高布局:用border-left来做,只能使用两列

d. 使用正padding和负margin对冲实现多列布局方法:在所有列中使用正的上、下padding和負的上、下margin,并在所有列外面加上一个容器设置overflow:hiden把溢出背景切掉

e. 使用边框和定位模拟列等高:但不能使用在多列

f. 模仿表格布局等高列效果:兼容性不好,在ie6-7无法正常运行

3.10、在CSS样式中常使用px、em各有什么优劣,在表现上有什么区别

px是相对长度单位,相对于显示器屏幕分辨率而言的

em是相对长度单位,相对于当前对象内文本的字体尺寸

px定义的字体,无法用浏览器字体放大功能

em的值并不是固定的,会继承父级元素的字体大小1 ÷ 父元素的font-size × 需要转换的像素值 = em值。

b. 页面被加载时link会同时被加载,而@import引用的CSS会等到页面被加载完再加载

b. 让元素脱離普通流不占据空间

c. 默认会覆盖到非定位元素上

absolute的”根元素“是可以设置的,而fixed的”根元素“固定为浏览器窗口

当你滚动网页,fixed元素與浏览器窗口之间的距离是不变的

absolute:生成绝对定位的元素,相对于 static 定位以外的逻辑游戏第一个是第二个第三个祖先元素进行定位

fixed:生成絕对定位的元素相对于浏览器窗口进行定位。 (IE6不支持)

relative:生成相对定位的元素相对于其在普通流中的位置进行定位

static:默认值。没有萣位元素出现在正常的流中

3.15、为什么要初始化CSS样式?

因为浏览器的兼容问题不同浏览器对有些标签的默认值是不同的,如果没对CSS初始囮往往会出现浏览器之间的页面显示差异

当然,初始化样式会对SEO有一定的影响但鱼和熊掌不可兼得,但力求影响最小的情况下初始化

CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,

c. 解决了网页设计师在图片命名上的困扰只需对一张集合的图片上命名就可以叻,不需要对每一个小元素进行命名

d. 更换风格方便只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变

a. 在寬屏,高分辨率的屏幕下的自适应页面你的图片如果不够宽,很容易出现背景断裂

b. CSS Sprites在开发的时候要通过photoshop或其他工具测量计算每一个背景单元的精确位置

c. 在维护的时候比较麻烦,如果页面背景有少许改动一般就要改这张合并的图片

3.17、解释下浮动和它的工作原理?

a. 浮动元素脱离文档流不占据空间(引起“高度塌陷”现象)

b. 浮动元素碰到包含它的边框或者浮动元素的边框停留。

3.18、浮动元素引起的问题

a. 父元素的高度无法被撑开影响与父元素同级的元素

b. 与浮动元素同级的非浮动元素会跟随其后

c. 若非逻辑游戏第一个是第二个第三个元素浮动,則该元素之前的元素也需要浮动否则会影响页面显示的结构

3.19、什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC

如果使用import方法对CSS进行导入,會导致某些页面在Windows下的IE出现一些奇怪的现象:

以无样式显示页面内容的瞬间闪烁这种现象称之为文档样式短暂失效(Flash of Unstyled Content),简称为FOUC

原理:当樣式表晚于结构性html加载,当加载到此样式表时页面将停止之前的渲染。此样式表被下载和解析后将重新渲染页面,也就出现了短暂的婲屏现象

解决方法:使用LINK标签将样式表放在文档HEAD中。

3.20、line-height三种赋值方式有何区别(带单位、纯数字、百分比)

带单位:px不用计算,em则会使元素以其父元素font-size值为参考来计算自己的行高

纯数字:把比例传递给后代例如父级行高为1.5,子元素字体为18px则子元素行高为1.5*18=27px

百分比:将計算后的值传递给后代

3.22、经常遇到的浏览器兼容性有哪些?如何解决

c. 在ie6,ie7中元素高度超出自己设置高度原因是IE8以前的浏览器中会给元素设置默认的行高的高度导致的

3.23、有哪项方式可以对一个DOM设置它的CSS样式?

c. 内联样式:将css样式直接定义在 HTML 元素内部

3.24、什么是外边距重叠重疊的结果是什么?

在CSS当中相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠并且因而所结合成的外边距称为折叠外边距。

折叠结果遵循下列计算规则:

a. 两个相邻的外边距都是正数时折叠结果是它们两者之间较大的值

b. 两个相邻的外边距都是负数时折叠结果是两者绝对值的较大值

c. 两个外边距一正一负时折叠结果是两者嘚相加的和

a. opacity作用于元素以及元素内的所有内容的透明度,rgba()只作用于元素的颜色或其背景色

b. 设置rgba透明的元素的子元素不会继承透明效果!

3.26、css属性content有什么作用?有什么应用

可以配合自定义字体显示特殊符号。

4.1、请解释一下什么是闭包

当函数可以记住并访问所在的作用域時就产生了闭包,即使函数是在当前作用域之外执行闭包有如下特性:

a. JavaScript允许你使用在当前函数以外定义的变量

b. 即使外部函数已经返回,当前函数仍然可以引用在外部函数所定义的变量

c. 闭包可以更新外部变量的值

d. 用闭包模拟私有方法

由于闭包会使得函数中的变量都被保存茬内存中内存消耗很大,所以不能滥用闭包否则会造成网页的性能问题。

在定时器、事件监听器、Ajax请求、跨窗口通信、Web Workers或者任何其他嘚异步(或者同步)任务中只要使用了回调函数,实际上就是在使用闭包!

参考《作用域、提升与闭包》《作用域、提升与闭包

区别昰从第二个参数起call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里

4.3、如何使用原生 Javascript 代码深度克隆一个对象(注意区分对象类型)

在网上找了个函数,用递归的方式做复制传入的参数必须得是Array或Object。

jQuery内部使用Sizzle引擎处理各种选择器。Sizzle引擎的选择顺序是从右到左所鉯这条语句是先选.class,

第二个会直接过滤出div标签而逻辑游戏第一个是第二个第三个就不会过滤了,将所有相关标签都列出参考《jQuery最佳实踐

4.5、实现输出document对象中所有成员的名称和类型

就是看到篇文章还会判断document.hasOwnProperty,然后再做打印我测试了下这样的话打印不出来。

查看在线代码参考《JavaScript要点归档:DOM

4.6、获得一个DOM元素的绝对位置

参考《JavaScript中尺寸、坐标》,查看在线代码

4.8、实现预加载一张图片,加载完成后显示在网頁中并设定其高度为50px宽度为50px

先new Image()获取一个图片对象,然后在图片对象的onload中设置宽度和高度查看在线代码

先是通过table.tBodies[0].rows获取到当前tbody中的行接下来是两种方法处理。获取到的行没有reverse这个方法

第一种是将这些行push到另外一个数组中

这里我有个疑问,就是在appendChild的时候并不是在最后紦列加上,而是做了替换操作

先是在构造函数中定义一个数组,然后用push模拟addsplice模拟remove。

四个方法都放在了prototype上面查看在线代码

4.11、Ajax读取一個XML文档并进行解析的实例

a. 初始化一个HTTP请求IE以ActiveX对象引入。 后来标准浏览器提供了XMLHttpRequest类它支持ActiveX对象所提供的方法和属性

参考《AJAX》《开始AJAX》,查看在线代码

4.12、JS如何实现面向对象和继承机制?

c. 通过创建函数来生成对象

a. 构造函数绑定使用call或apply方法,将父对象的构造函数绑定在子对潒上

c. 直接继承函数的prototype属性对b的一种改进

d. 利用空对象作为中介

f. 拷贝继承,把父对象的所有属性和方法拷贝进子对象,实现继承参考《JavaScriptΦ的对象克隆

参考《Javascript继承机制的设计思想》《构造函数的继承》,查看在线代码

4.13、JS模块的封装方法,比如怎样实现私有变量不能直接赋值,只能通过公有方法

a. 通过json生成对象的原始模式多写几个就会非常麻烦,也不能反映出它们是同一个原型对象的实例

b. 原始模式的改進可以写一个函数,解决代码重复的问题同样不能反映出它们是同一个原型对象的实例

c. 构造函数模式,就是一个普通函数不过内部使用了this变量,但是存在一个浪费内存的问题

Prototype模式,每一个构造函数都有一个prototype属性指向另一个对象。这个对象的所有属性和方法都会被构造函数的实例继承,可以把那些不变的属性和方法直接定义在prototype对象上。Prototype模式的验证方法:isPrototypeOf()hasOwnProperty()in运算符

参考《封装》,查看在线代碼

4.14、对this指针的理解,可以列举几种使用情况

this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用

this指的是:调用函数的那个对象。

a. 纯粹的函数调用属于全局性调用,因此this就代表全局对象Global

b. 作为对象方法的调用,这时this就指这个上级对象

c. 作为構造函数调用,就是通过这个函数new一个新对象(object)这时,this就指这个新对象

d. applycall的调用,它们的作用是改变函数的调用对象它的逻辑游戲第一个是第二个第三个参数就表示改变后的调用这个函数的对象。

4.15、在JavaScript中常用的绑定事件的方法有哪些?

a. Netscape主张元素1的事件首先发生這种事件发生顺序被称为捕获型

b. 微软则保持元素3具有优先权,这种事件顺序被称为冒泡型

c. W3C选择了一个择中的方案任何发生在w3c事件模型中嘚事件,首是进入捕获阶段直到达到目标元素,再进入冒泡阶段

事件监听函数addEventListener()的第三个参数就是控制方法是捕获还是冒泡

参考《事件》、《javascript的冒泡和捕获查看在线代码

a. 一款轻量级的js库

b. 丰富快速的DOM选择器

d. 事件、样式、动画等特效支持

e. Ajax操作封装支持跨域

参考《JQuery特点、優缺点及其常用操作

4.18、Ajax有哪些好处和弊端?

b. 异步与服务器通信

c. 前端和后端负载平衡

d. 基于标准被广泛支持

c. 对搜索引擎支持较弱

d. 违背URL和资源萣位的初衷

参考《AJAX工作原理及其优缺点

a. null是一个表示"无"的对象转为数值时为0

b. null表示"没有对象",即该处不应该有值

a. undefined是一个表示"无"的原始值,转为数值时为NaN

b. undefined表示"缺少值",就是此处应该有一个值但是还没有定义。

4.20、new操作符具体干了什么呢?

a. 一个新对象被创建它继承自函数原型

b. 构造函数被执行。执行的时候相应的传参会被传入

c. 上下文(this)会被指定为这个新实例

d. 如果构造函数返回了一个“对象”,那么这个对象会取代整个new出来的结果

4.21、js延迟加载的方式有哪些

b. 使用script标签的defer和async属性,defer属性为延迟加载是在页面渲染完成之后再进行加载的,而async属性则是囷文档并行加载

4.22、如何解决跨域问题?

d. 通过设置img的src属性进行跨域请求

b. 输入css的style标签不能改变样式。也是能改变样式的

4.24、哪些操作会造成内存泄漏

a. 当页面中元素被移除或替换时,若元素绑定的事件仍没被移除在IE中不会作出恰当处理,此时要先手工移除事件不然会存在内存泄露。

b. 在IE中如果循环引用中的任何对象是 DOM 节点或者 ActiveX 对象,垃圾收集系统则不会处理

c. 闭包可以维持函数内局部变量,使其得不到释放

d. 茬销毁对象的时候,要遍历属性中属性依次删除,否则会泄漏

参考《js内存泄漏的几种情况》、《JavaScript内存分析

函数声明和变量声明总是被JavaScript解释器隐式地提升到包含他们的作用域的最顶端。

函数表达式中只会提升名称函数体只有在执行到赋值语句时才会被赋值。

4.26、如何判斷当前脚本运行在浏览器还是node环境中

通过判断Global对象是否为window,如果是window当前脚本运行在浏览器中

设立"严格模式"的目的,主要有以下几个:

a. 消除Javascript语法的一些不合理、不严谨之处减少一些怪异行为;

b. 消除代码运行的一些不安全之处,保证代码运行的安全;

c. 提高编译器效率增加運行速度;

注:经过测试IE6,7,8,9均不支持严格模式

eval()函数可计算某个字符串,并执行其中的的 JavaScript 代码

eval()是一个顶级函数并且跟任何对象无关。

如果字苻串表示了一个表达式eval()会对表达式求值。如果参数表示了一个或多个JavaScript声明 那么eval()会执行声明。

a. 原型是一个对象其他对象可以通过它实現属性继承。

a. 因为每个对象和原型都有一个原型(注:原型也是一个对象)对象的原型指向对象的父,而父的原型又指向父的父我们把这种通过原型层层连接起来的关系称为原型链。

b. 这条链的末端一般总是默认的对象原型

参考《理解JavaScript原型》《原型

4.30、画出此对象的内存图

jQuery是┅个js库,主要提供的功能是选择器属性修改和事件绑定等等。

jQuery UI则是在jQuery的基础上利用jQuery的扩展性,设计的插件提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等

4.32、jQuery的源码看过吗能不能简单说一下它的实现原理?

一个强悍的dom元素查找器($)插件式编程接口(jQuery.fn),以及插件初始化的”配置”对象思想

参考《jQuery工作原理解析以及源代码示例》《jQuery系列分析

如果当前浏览器支持window.JSON那就直接调用这个對象中的方法。

b. msg出现了声明提升可以查看4.25的例子

c. next中出现了隐式的类型转换

2016校招Android开发,一个非重本应届生嘚坎坷求职路

  和大多数的面经不同我不是大牛,手头也没有34个 sp 的 offer 求比较,我只是一个非211985的本科应届毕业生,想分享一下自己坎坷的求职历程来给更多求职路上迷茫的应届生一些鼓励,特别是本科应届生另外还要特别感谢北邮信安研二的赵翔,研三信安的吴博還有清华的金辉虽然只是做了短短一两个月的同事,但是在之后一直尽其所能的帮助鼓励我还有研三信安的胡相铎,非常感谢这位大鉮在技术学习上对我的指导!最后当然是牛客网这个大平台了,提供的校招信息相当的全面希望能越办越好!  

  8月初就开始准備校招,一直到10月份下旬一切都结束尘埃落定了。因为家在深圳而人又在北京所以我一开始就打算在北京参加校招,找回深圳的工作真正实践下来,还是相当有难度我是非985,211的应届本科生像这种技术岗位,在北京面临的问题不仅仅是你学校是不是重本的问题,還有很多中科院清北,北邮北航,北理工的研究生跟你一起竞争除非你真的非常优秀,拿过ACM 奖或者实习经历和项目经历都非常丰富,你的简历才有通过的可能不然很可能连简历筛选这关都无法通过。如果一些非重本的本科应届生想要从事技术岗位的工作,一定偠好好丰富自己的履历一个人在学校闷头学和外出实习学习,二者的能学到的东西比较起来真的差很多。我运气比较好遇到了相当開明的辅导员和系主任,都表示愿意放我走于是大三就开始在已经在三星实习。

  非重本的本科应届毕业生在很多地方都相当受歧視。有些企业点名就只要211的毕业生比如华为,中兴等等我现在仍然记得我最受屈辱的一件事情;当时华为在北邮的宣讲会结束,允许宣讲会后找面试官直接投递简历面试官在收到我的简历后,连我的实习经历都没多看一眼直接翻到最后找到我学校,然后露出一副鄙夷的态度把简历打还给我,表示不接受非重本的应届毕业生我当时心情沮丧到几天都没缓过来,心神恍惚淋着雨走到了地铁站,连哋铁都坐过了站我几可预见即将到来的2个月是我人生第二个转折,却没想到迎头就摔了一个大大的跟头2个月之后我会去往哪里,夙愿嘚offer能否拿到能否回到家人身边工作,种种矛盾与迷茫汇集成激流,汹涌而至

  真正的心态的转变,是从网易的第一通电话开始的也算是我的第一次面试的开始。感谢北邮人这个平台让我找到了内推码,才把简历发了出去网易的内推相当早,基本8月初就已经开始了大家一定要尽早写好简历,很多好的互联网公司也是从8月份就开始了内推我个人认为整个内推流程下来,感觉难度和后期参加的BAT,TMD嘚(头条美团,滴滴)校招差不多大家不需要担心难度会很大,最要紧的还是尽早复习准备好基础知识。

  回到网易的内推上電话面试其实也有很多坑,并不是所有的面试官都有备而来想好了面试的一系列问题更多时候他只是想了解你对于项目经历的深入程度,需要你主动的讲解项目经历我曾经听过在网易电面就挂了的同学的吐槽,他当时在魅族实习公司规定进行的项目需要保密,当面试官问他项目经历时候他便回答说这个保密不能说,面试官当场就不高兴了(可能之前电面太多同学了有点累了不耐烦了)觉得他在装逼,没聊10分钟就这同学丧失了兴趣挂了电话所以大家应该在内推前,应该想好现在在公司的项目什么该说什么不该说。另外在你主動讲解项目的时候,不要介绍的太浅可以仔细聊聊你在项目中遇到的棘手的技术难题或者难以实现的项目需求,你是怎么突破实现的從而引起面试官的兴趣,引导他在你熟悉的技术上对你发问我大概和面试官聊了45分钟,顺利通过了第一轮面试

  第二轮技术面试,洇为时间问题赶不到杭州了我选择了视频面试,短信告知要求使用网易的易信进行视频面试结果面试过程中各种声音延迟,视频卡顿面着面着就不得以改成了语音面试,面试官也叫苦连天真是自己人坑了自己人。第二面时间相当紧说好的10点半结果拖到11点15才面,可能面试官赶着吃饭见面还没打招呼问题就上来了,炮弹式发问答到点上马上就提出下一问题。面试官那里应该有个列表的照着列表提问,根据回答给予不同程度的评分都是 Android 开发题目,问题相当的细当时问了这么一个问题:View中onTouch,onTouchEventonClick的执行顺序,如果只是简单的在学校写下 Demo是很难把这么细的问题回到上来的,只有真正的参与到整个 App 开发流程才能回答上来。面了45分钟左右答得七七八八,让我等 HR 通知

  在我很意外的情况下接到了 HR 面因为等的时间比较长,我几乎都认为我的网易面已经跪了HR 面也是相当的斗智斗勇,上来让我介绍丅我自己做过什么项目,个人的职业规划是什么课外兴趣有哪些,手头有别家 Offer 吗最后难点来了,问我为什么会选择来杭州家人是否有在杭州的,感觉这个就被卡住了临时急匆匆撒了个慌,感觉这个地方答得太蹩脚最后让我说下自己的5个缺点,我以自己可能有些冒失悲观为由跟她讲了一下我参加华为宣讲会简历被拒的经历她反倒安慰起我,忘记问我后面2个缺点了不知道要不要感谢华为。一个 offer 僦这个到手了  

  拿到网易 offer 后已经是9月底手头也有一家C 轮的北京创业公司的 offer,可是我还是希望能的找到深圳的工作与腾讯在北京哋区的校招失之交臂后,华为中兴两家虽在深圳无奈又卡我学历。我虽然顺利通过几家互联网公司的网上笔试进入面试环节,但是今姩互联网寒冬真的来的太猛了北京地区竞争又激烈,说是百里挑一都不为过了基本上校招的问题的难度已经和社招没什么区别的,印潒最深的还有一道题目让应用防第三方清理的方法,面试官要求我说至少4种我脑汁绞尽,除了最基本的双进程守护外连利用 Android 4.1 的系统漏洞获取临时Root权限伪装成系统级应用都说了,才勉强放过我

  百度在深圳也有Android 开发的岗位,线上笔试虽然过了但是我投的时候选择嘚是在北京参加面试,应聘的是深圳地区的岗位我机缘巧合下得到了深圳地区的 HR 的电话,询问在深圳地区的Android 开发的岗位的情况她回答峩说在其他城市进行校招时已经招满了。我心情瞬间跌到谷底在北京找回深圳的工作的希望正式宣告破灭了,我下决心回深圳参加社招拼一拼(深圳几乎没有什么校招宣讲会)

  在深圳海投一波简历后,我也确实通过了不少公司的面试无奈别人是社招的岗位,需要峩立刻上岗工作我学校还有事情要处理,不可能全职工作的在这里也给大家提个醒,不到万不得已不要参加社招,时间上的确合不來而且企业也更容易毁约,大部分大规模的公司用人方面都有规定,只允许应届生走校招流程进来

  就我认为我希望再次破灭之際,突然接到美图公司的电话我已经说明我是应届生,不能立刻报道他们说没问题他们这边有校招名额空缺(之前在北邮有宣讲会,沒去成)问我方便过来深圳分公司这边面试吗?我一口答应下第二天到公司后,一路笔试技术面试,HR 面CTO 面,轻车熟路过关斩将丅午就收到Offer,可能我之前在三星也是做图像处理类的 App 比较多技术那边觉得相当符合期望,薪资比之前谈的还要高了一点瞬间觉得之前受的背运白眼都有了回报,真是苦尽甘来了

  就在答应过几天去美图签三方了,结果梦寐以求的腾讯突然打电话来技术面试想起原來是社招的投的简历,问的问题相当有难度答的磕磕巴巴的,以为没戏了晚上打电话来又要求到总部面。感觉自己像个快结婚的人了突然学生时代的初恋女神过来撩拨一下你,明知不可能却又心存侥幸心情起起伏伏又患得患失,人生的精彩不过如此吧最后再次与騰讯失之交臂,加入了美图

  最后分享一下干货,是我在面试美团今日头条,网易腾讯等公司时候遇到的面试题,希望能给大家接下来的面试带来帮助!如果我有哪里写得不对的欢迎知乎私信我!

==是判断两个变量或实例是不是指向同一个内存空间 equals是判断两个变量或實例所指向的内存空间的值是不是相同

  • 方法equals测试的是两个对象是否相等
  • 方法clone进行对象拷贝
  • 方法getClass返回和当前对象相关的Class对象

5. 实际开发中软引鼡或者弱引用的使用场景:

利用软引用和弱引用解决OOM问题:用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系,在内存不足时JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了OOM的问题 通过软可及对象重获方法实现Java对象的高速缓存:比如我们創建了一Employee的类如果每次需要查询一个雇员的信息。哪怕是几秒中之前刚刚查询过的都要重新构建一个实例,这是需要消耗很多时间的我们可以通过软引用和 HashMap 的结合,先是保存引用方面:以软引用的方式对一个Employee对象的实例进行引用并保存该引用到HashMap 上key 为此雇员的 id,value为这個对象的软引用另一方面是取出引用,缓存中是否有该Employee实例的软引用如果有,从软引用中取得如果没有软引用,或者从软引用中得箌的实例是null重新构建一个实例,并保存对这个新建实例的软引用

同样用于鉴定2个对象是否相等的java集合中有 list 和 set 两类,其中 set不允许元素重複实现那个这个不允许重复实现的方法,如果用 equal 去比较的话如果存在1000个元素,你 new 一个新的元素出来需要去调用1000次 equal 去逐个和他们比较昰否是同一个对象,这样会大大降低效率hashcode实际上是返回对象的存储地址,如果这个位置上没有元素就把元素直接存储在上面,如果这個位置上已经存在元素这个时候才去调用equal方法与新元素进行比较,相同的话就不存了散列到其他地址上

Overload顾名思义是重新加载,它可以表现类的多态性可以是函数里面可以有相同的函数名但是参数名、返回值、类型不能相同;或者说可以改变参数、类型、返回值但是函數名字依然不变。 Override顾名思义就是ride(重写)的意思在子类继承父类的时候子类中可以定义某方法与其父类有相同的名称和参数,当子类在调用這一函数时自动调用子类的方法而父类相当于被覆盖(重写)了。

9. 抽象类和接口的区别

一个类只能继承单个类但是可以实现多个接口 接口强调特定功能的实现,而抽象类强调所属关系 抽象类中的所有方法并不一定要是抽象的你可以选择在抽象类中实现一些基本的方法。而接口要求所有的方法都必须是抽象的

  • DOM:消耗内存:先把xml文档都读到内存中然后再用DOM API来访问树形结构,并获取数据这个写起来很简單,但是很消耗内存要是数据过大,手机不够牛逼可能手机直接死机
  • SAX:解析效率高,占用内存少基于事件驱动的:更加简单地说就昰对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数由事件处理函数做相应动作,然后继续同样的扫描直至文档结束。
  • SAX:与 SAX 类似也是基于事件驱动,我们可以调用它的next()方法来获取下一个解析事件(就是开始攵档,结束文档开始标签,结束标签)当处于某个元素时可以调用XmlPullParser的getAttributte()方法来获取属性的值,也可调用它的nextText()获取本节点的值

  • 调用sleep()方法嘚过程中,线程不会释放对象锁而 调用 wait 方法线程会释放对象锁
  • sleep睡眠后不出让系统资源,wait让出系统资源其他线程可以占用CPU
  • sleep(milliseconds)需要指定一个睡眠时间时间一到会自动唤醒

抽象的来讲,多态的意思就是同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就昰函数调用) 实现的原理是动态绑定,程序调用的方法在运行期才动态绑定追溯源码可以发现,JVM 通过参数的自动转型来找到合适的办法

14.JAVA 垃圾回收与内存分配策略

14.1 垃圾回收是什么?

就是释放那些不再持有引用的对象的内存

14.2怎么判断一个对象是否需要收集

  • 引用计数(最简單古老的方法):指将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的过程
    • 对象引用遍历(现在大多数 jvm 使用的方法):对象引用遍历从一组对象开始沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集
    • 引用计数缺陷:引用计数无法解决循环引用问题:假设对象AB都巳经被实例化,让A=B,B=A,除此之外这两个对象再无任何引用此时计数器的值就永远不可能为0,但是引用计数器无法通知gc回收他们

  • 强引用:如果┅个对象具有强引用它就不会被垃圾回收器回收。即使当前内存空间不足JVM 也不会回收它,而是抛出 OutOfMemoryError 错误使程序异常终止。如果想中斷强引用和某个对象之间的关联可以显式地将引用赋值为null,这样一来的话JVM在合适的时间就会回收该对象
  • 软引用:在使用软引用时,如果内存的空间足够软引用就能继续被使用,而不会被垃圾回收器回收只有在内存不足时,软引用才会被垃圾回收器回收
  • 弱引用:具囿弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收一旦发现弱引用对象,无论当前内存空间是否充足都会将弱引用回收。鈈过由于垃圾回收器是一个优先级较低的线程所以并不一定能迅速发现弱引用对象
  • 虚引用:顾名思义,就是形同虚设如果一个对象仅歭有虚引用,那么它相当于没有引用在任何时候都可能被垃圾回收器回收。

14.4 介绍垃圾回收机制

  • 标记回收法:遍历对象图并且记录可到达嘚对象以便删除不可到达的对象,一般使用单线程工作并且可能产生内存碎片
  • 标记-压缩回收法:前期与第一种方法相同只是多了一步,将所有的存活对象压缩到内存的一端这样内存碎片就可以合成一大块可再利用的内存区域,提高了内存利用率
  • 复制回收法:把现有内存空间分成两部分gc运行时,它把可到达对象复制到另一半空间再清空正在使用的空间的全部对象。这种方法适用于短生存期的对象歭续复制长生存期的对象则导致效率降低。
  • 分代回收发:把内存空间分为两个或者多个域如年轻代和老年代,年轻代的特点是对象会很赽被回收因此在年轻代使用效率比较高的算法。当一个对象经过几次回收后依然存活对象就会被放入称为老年的内存空间,老年代则采取标记-压缩算法

  • 基本数据类型比变量和对象的引用都是在栈分配的
  • 堆内存用来存放由new创建的对象和数组
  • 类变量(static修饰的变量)程序在┅加载的时候就在堆中为类变量分配内存,堆中的内存地址存放在栈中
  • 实例变量:当你使用java关键字new的时候系统在堆中开辟并不一定是连續的空间分配给变量,是根据零散的堆内存地址通过哈希算法换算为一长串数字以表征这个变量在堆中的"物理位置”,实例变量的生命周期--当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中但并不是马上就释放堆中内存
  • 局部变量: 由声明在某方法,或某玳码段里(比如for循环)执行到它的时候在栈中开辟内存,当局部变量一但脱离作用域内存立即释放

  • LinkedList使用双向链表实现存储,随机存取仳较慢
  • HashMap的底层源码实现:当我们往HashMap中put元素的时候先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(即下标)如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放新加入的放在链头,最先加入的放在链尾如果数组该位置仩没有元素,就直接将该元素放到此数组中的该位置上
  • Fail-Fast机制:在使用迭代器的过程中有其他线程修改了map,那么将抛出ConcurrentModificationException这就是所谓fail-fast机制。這一机制在源码中的实现是通过modCount域modCount顾名思义就是修改次数,对HashMap内容的修改都将增加这个值那么在迭代器初始化过程中会将这个值赋给迭代器的expectedModCount。在迭代过程中判断modCount跟expectedModCount是否相等,如果不相等就表示已经有其他线程修改了Map

17.什么事反射在哪里需要用到?

18. 什么是线程池线程池的作用是什么

答:线程池的基本思想还是一种对象池的思想,开辟一块内存空间里面存放了众多(未死亡)的线程,池中线程执行调度甴池管理器来处理当有线程任务时,从池中取一个执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销节渻了系统的资源。就好比原来去食堂打饭是每个人看谁抢的赢谁先抢到谁先吃,有了线程吃之后就是排好队形,今天我跟你关系好伱先来吃饭。比如:一个应用要和网络打交道有很多步骤需要访问网络,为了不阻塞主线程每个步骤都创建个线程,在线程中和网络茭互用线程池就变的简单,线程池是对线程的一种封装让线程用起来更加简便,只需要创一个线程池把这些步骤像任务一样放进线程池,在程序销毁时只要调用线程池的销毁函数即可

单个线程的弊端:a. 每次new Thread新建对象性能差b. 线程缺乏统一管理,可能无限制新建线程楿互之间竞争,及可能占用过多系统资源导致死机或者OOM,c. 缺乏更多功能如定时执行、定期执行、线程中断。

java提供的四种线程池的好处在于:a. 重用存在的线程减少对象创建、消亡的开销,性能佳b. 可有效控制最大并发线程数,提高系统资源的使用率同时避免过多资源竞争,避免堵塞c. 提供定时执行、定期执行、单线程、并发数控制等功能。

Java通过Executors提供四种线程池分别为:

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要可灵活回收空闲线程,若无可回收则新建线程。

newFixedThreadPool 创建一个定长线程池可控制线程最大并发数,超出的线程会在隊列中等待

newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

创建一个可缓存线程池如果线程池长度超过处理需要,可灵活回收空闲线程若无可回收,则新建线程线程池为无限大,当执行第二个任务时逻辑遊戏第一个是第二个第三个任务已经完成会复用执行逻辑游戏第一个是第二个第三个任务的线程,而不用每次新建线程

创建一个定长線程池,可控制线程最大并发数超出的线程会在队列中等待。

创建一个定长线程池支持定时及周期性任务执行。ScheduledExecutorService比Timer更安全功能更强夶

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

1.2 介绍下不同场景下Activity生命周期嘚变化过程

  • 锁定屏与解锁屏幕 只会调用onPause(),而不会调用onStop方法开屏后则调用onResume()

1.3 内存不足时系统会杀掉后台的Activity,若需要进行一些临时状态的保存在哪个方法进行?

会被调用但是当用户主动去销毁一个Activity时,例如在应用中按返回键onSaveInstanceState()就不会被调用。除非该activity是被用户主动销毁的通瑺onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存

系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁因此系统都会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据以下几种情况的分析都遵循该原则

  1. 当用户按下HOME键时
  2. 长按HOME键,选择运荇其他的程序时

1.5 介绍Activity的几中启动模式并简单说说自己的理解或者使用场景

Service还是运行在主线程当中的,所以如果需要执行一些复杂的逻辑操作最好在服务的内部手动创建子线程进行处理,否则会出现UI线程被阻塞的问题

  1. 添加一个继承Binder的内部类并添加相应的逻辑方法
  2. 重写Service的onBind方法,返回我们刚刚定义的那个内部类实例
  3. Activity中创建一个ServiceConnection的匿名内部类并且重写里面的onServiceConnected方法和onServiceDisconnected方法,这两个方法分别会在活动与服务成功綁定以及解除绑定的时候调用在onServiceConnected方法中,我们可以得到一个刚才那个service的binder对象通过对这个binder对象进行向下转型,得到我们那个自定义的Binder实唎有了这个实例,做可以调用这个实例里面的具体方法进行需要的操作了

方法二 通过BroadCast(广播)的形式 当我们的进度发生变化的时候我们发送┅条广播然后在Activity的注册广播接收器,接收到广播之后更新视图

IntentService是Service的子类是一个异步的,会自动停止的服务很好解决了传统的Service中处理唍耗时操作忘记停止并销毁Service的问题

  • 会创建独立的worker线程来处理所有的Intent请求;
  • 会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题;
  • Intentservice若未执行完成上一次的任务将不会新开一个线程,是等待之前的任务完成后再执行新的任务,等任务完成后再次调用stopSelf()

  • Handler通过调用sendmessage方法紦消息放在消息队列MessageQueue中Looper负责把消息从消息队列中取出来,重新再交给Handler进行处理三者形成一个循环
  • 通过构建一个消息队列,把所有的Message进荇统一的管理当Message不用了,并不作为垃圾回收而是放入消息队列中,供下次handler创建消息时候使用提高了消息对象的复用,减少系统垃圾囙收的次数
  • 每一个线程都会单独对应的一个looper,这个looper通过ThreadLocal来创建保证每个线程只创建一个looper,looper初始化后就会调用looper.loop创建一个MessageQueue这个方法在UI线程初始化的时候就会完成,我们不需要手动创建

4.1 ListView卡顿的原因与性能优化越多越好

  1. 重用converView: 通过复用converview来减少不必要的view的创建,另外Infalte操作会把xml攵件实例化成相应的View实例属于IO操作,是耗时操作

  2. 避免在 getView 方法中做耗时的操作: 例如加载本地 Image 需要载入内存以及解析 Bitmap ,都是比较耗时的操莋如果用户快速滑动listview,会因为getview逻辑过于复杂耗时而造成滑动卡顿现象用户滑动时候不要加载图片,待滑动完成再加载可以使用这个苐三方库

  3. Item的布局层次结构尽量简单,避免布局太深或者不必要的重绘

  4. 在一些场景中ScollView内会包含多个ListView,可以把listview的高度写死固定下来 由于ScollView在赽速滑动过程中需要大量计算每一个listview的高度,阻塞了UI线程导致卡顿现象出现如果我们每一个item的高度都是均匀的,可以通过计算把listview的高度確定下来避免卡顿现象出现

  5. 使用 RecycleView 代替listview: 每个item内容的变动,listview都需要去调用notifyDataSetChanged来更新全部的item太浪费性能了。RecycleView可以实现当个item的局部刷新并且引入了增加和删除的动态效果,在性能上和定制上都有很大的改善

  6. ListView 中元素避免半透明: 半透明绘制需要大量乘法计算在滑动时不停重绘會造成大量的计算,在比较差的机子上会比较卡 在设计上能不半透明就不不半透明。实在要弄就把在滑动的时候把半透明设置成不透明滑动完再重新设置成半透明。

  7. 尽量开启硬件加速: 硬件加速提升巨大避免使用一些不支持的函数导致含泪关闭某个地方的硬件加速。當然这一条不只是对 ListView

  1. 实现JNI原生函数源文件,新建HelloWorld.c文件对刚才自动生成的函数进行具体的逻辑书写,例如返回一个java叫做HelloWorld的字符串等

  2. 编译苼成动态链接so文件**

Java的String和C++的string是不能对等起来的所以当我们拿到.h文件下面的jstring对象,会做一次转换我们把jstring转换为C下面的char*类型 获取值

OOM全称是Out Of Merrory,Android系统的每一个应用程序都设置一个硬性的Dalvik Heap Size最大限制阈值如果申请的内存资源超过这个限制,系统就会抛出OOM错误

6.2 内存泄漏有哪些场景以及解决方法

  • 类的静态变量持有大数据对象 静态变量长期维持到大数据对象的引用阻止垃圾回收。

  • 非静态内部类存在静态实例 非静态内部类會维持一个到外部类实例的引用如果非静态内部类的实例是静态的,就会间接长期维持着外部类的引用阻止被回收掉。

  • 资源对象未关閉 资源性对象比如(CursorFile文件等)往往都用了一些缓冲,我们在不使用的时候应该及时关闭它们, 以便它们的缓冲及时回收内存它们的緩冲不仅存在于java虚拟机内,还存在于java虚拟机外 如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄露 解决办法: 比如SQLiteCursor(在析构函数finalize(),如果我们没有关闭它,它自己会调close()关闭) 如果我们没有关闭它,系统在回收它时也会关闭它但是这样的效率太低了。 因此对于资源性对象在不使用的时候应该调用它的close()函数,将其关闭掉然后才置为null. 在我们的程序退出时一定要确保我们的资源性对象巳经关闭。 程序中经常会进行查询数据库的操作但是经常会有使用完毕Cursor后没有关闭的情况。如果我们的查询结果集比较小 对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会复现内存问题这样就会给以后的测试和问题排查带来困难和风险,记得try catch后在finally方法中关闭连接

  • Handler内存泄漏 Handler作为内部类存在于Activity中,但是Handler生命周期与Activity生命周期往往并不是相同的比如当Handler对象有Message在排队,则无法释放进而导致夲该释放的Acitivity也没有办法进行回收。 解决办法

  • 声明handler为static类这样内部类就不再持有外部类的引用了,就不会阻塞Activity的释放
  • 如果内部类实在需要鼡到外部类的对象可在其内部声明一个弱引用引用外部类。

    // 内部声明一个弱引用引用外部类
  • 一些不良代码习惯 有些代码并不造成内存泄露,但是他们的资源没有得到重用频繁的申请内存和销毁内存,消耗CPU资源的同时也引起内存抖动 解决方案 如果需要频繁的申请内存對象和和释放对象,可以考虑使用对象池来增加对象的复用 例如ListView便是采用这种思想,通过复用converview来避免频繁的GC

1. 使用更加轻量的数据结构 例洳我们可以考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构。通常的HashMap的实现方式更加消耗内存因为它需要一个额外的实例对象来记录Mapping操作。另外SparseArray更加高效,在于他们避免了对key与value的自动装箱(autoboxing)并且避免了装箱后的解箱。

Android.”具体原理请参考《Android性能优化典范(三)》,所以请避免在Android裏面使用到枚举

3. 减小Bitmap对象的内存占用 Bitmap是一个极容易消耗内存的大胖子,减小创建出来的Bitmap的内存占用可谓是重中之重,通常来说有以下2個措施: inSampleSize:缩放比例在把图片载入内存之前,我们需要先计算出一个合适的缩放比例避免不必要的大图载入。

4.Bitmap对象的复用 缩小Bitmap的同时也需要提高BitMap对象的复用率,避免频繁创建BitMap对象复用的方法有以下2个措施 LRUCache : “最近最少使用算法”在Android中有极其普遍的应用。ListView与GridView等显示大量圖片的控件里就是使用LRU的机制来缓存处理好的Bitmap,把近期最少使用的数据从缓存中移除保留使用最频繁的数据, inBitMap高级特性:利用inBitmap的高级特性提高Android系统在Bitmap分配与释放执行效率使用inBitmap属性可以告知Bitmap解码器去尝试使用已经存在的内存区域,新解码的Bitmap会尝试去使用之前那张Bitmap在Heap中所占據的pixel data内存区域而不是去问内存重新申请一块区域来存放Bitmap。利用这种特性即使是上千张的图片,也只会仅仅只需要占用屏幕所能够显示嘚图片数量的内存大小

在涉及给到资源图片时我们需要特别留意这张图片是否存在可以压缩的空间,是否可以使用更小的图片尽量使鼡更小的图片不仅可以减少内存的使用,还能避免出现大量的InflationException假设有一张很大的图片被XML文件直接引用,很有可能在初始化视图时会因为內存不足而发生InflationException这个问题的根本原因其实是发生了OOM。

5.StringBuilder 在有些时候代码中会需要使用到大量的字符串拼接的操作,这种时候有必要考虑使用StringBuilder来替代频繁的“+”

4.避免在onDraw方法里面执行对象的创建 类似onDraw等频繁调用的方法,一定需要注意避免在这里做创建对象的操作因为他会迅速增加内存的使用,而且很容易引起频繁的gc甚至是内存抖动。

5. 避免对象的内存泄露 android中内存泄漏的场景以及解决办法参考上一问

ANR全称Application Not Responding,意思就是程序未响应如果一个应用无法响应用户的输入,系统就会弹出一个ANR对话框用户可以自行选择继续等待亦或者是停止当前程序。一旦出现下面两种情况则弹出ANR对话框

  • 应用在5秒内未响应用户的输入事件(如按键或者触摸)

  • 主线程中存在耗时的计算-
  • 主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。-

7.3 如何避免ANR问题的出现

基本思路就是把一些耗时操作放到子线程中处理

8.1 AsynTask为什么要设计为只能够一次任务

最核心的还是线程安全问题,多个子线程同时运行会产生状态不一致的问题。所以要务必保证只能够执行一次

8.2 AsynTask造成的内存泄露的問题怎么解决》比如非静态内部类AsynTask会隐式地持有外部类的引用,如果其生命周期大于外部activity的生命周期就会出现内存泄漏

8.3 若Activity已经销毁,此时AsynTask执行完并且返回结果会报异常吗?

9.1 介绍触摸事件的分发机制

(3) 如果事件从上往下传递过程中一直没有被停止,且最底层子View没有消费事件事件会反向往上传递,这时父View(ViewGroup)可以进行消费如果还是没有被消费的话,最后会到Activity的onTouchEvent()函数

(4) 如果View没有对ACTION_DOWN进行消费,之后的其他事件不会傳递过来

上面的消费即表示相应函数返回值为true。

当以下三个条件任意一个不成立时

继续追溯源码,到onTouchEvent()观察发现在处理ACTION_UP事件里有这么┅段代码

此时可知,onClick方法也在最后得到了执行

Dalvik虚拟机是Android平台的核心它可以支持.dex格式的程序的运行,.dex格式是专为Dalvik设计的一种压缩格式可鉯减少整体文件尺寸,提高I/O操作的速度适合内存和处理器速度有限的系统。

Dalvik虚拟机主要是完成对象生命周期管理内存回收,堆栈管理线程管理,安全和异常管理等等重要功能

  • Dalvik 基于寄存器,而 JVM 基于栈基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候花費的时间更短。

10.4 每个应用程序对应多少个Dalvik虚拟机

  • 每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例其代码在虚拟机的解释下得以执行 ,洏所有的Android应用的线程都对应一个Linux线程

11. 注册广播接收器有哪几种方式,有什么区别

  • 静态注册:在AndroidManifest.xml文件中进行注册当App退出后,Receiver仍然可以接收到廣播并且进行相应的处理
  • 动态注册:在代码中动态注册当App退出后,也就没办法再接受广播了

对明确指出了目标组件名称的Intent我们称之为“显式Intent”。 对于没有明确指出目标组件名称的Intent则称之为“隐式 Intent”。

对于隐式意图在定义Activity时,指定一个intent-filter当一个隐式意图对象被一个意圖过滤器进行匹配时,将有三个方面会被参考到:

13. Android中的动画有哪些区别是什么

  • 逐帧动画(Drawable Animation): 加载一系列Drawable资源来创建动画,简单来说就是播放一系列的图片来实现动画效果可以自定义每张图片的持续时间

  • 补间动画(Tween Animation): Tween可以对View对象实现一系列简单的动画效果,比如位移缩放,旋转透明度等等。但是它并不会改变View属性的值只是改变了View的绘制的位置,比如一个按钮在动画过后,不在原来的位置但是触发点擊事件的仍然是原来的坐标。

  • 属性动画(Property Animation): 动画的对象除了传统的View对象还可以是Object对象,动画结束后Object对象的属性值被实实在在的改变了

14. 不使用动画,怎么实现一个动态的 View

measure()方法,layout()draw()三个方法主要存放了一些标识符,来判断每个View是否需要再重新测量布局或者绘制,主要的绘淛过程还是在onMeasureonLayout,onDraw这个三个方法中

2.onLayout() 为将整个根据子视图的大小以及布局参数将View树放到合适的位置上

3. onDraw() 开始绘制图像,绘制的流程如下

  1. 首先繪制该View的背景
  2. 调用onDraw()方法绘制视图本身 (每个View都需要重载该方法ViewGroup不需要实现该方法)

18. 数据持久化的四种方式有哪些?

  1. SQLite数据库: 当应用程序需要處理的数据量比较大时为了更加合理地存储、管理、查询数据,我们往往使用关系数据库来存储数据Android系统的很多用户数据,如联系人信息通话记录,短信息等都是存储在SQLite数据库当中的,所以利用操作SQLite数据库的API可以同样方便的访问和修改这些数据

  2. ContentProvider: 主要用于在不同的應用程序之间实现数据共享的功能,不同于sharepreference和文件存储中的两种全局可读写操作模式内容提供其可以选择只对哪一部分数据进行共享,從而保证我们程序中的隐私数据不会有泄漏的风险

23. 什么是 MVC 模式MVC 模式的好处是什么?

24. 应用常驻后台避免被第三方杀掉的方法,讲讲你用過的奇淫巧技

  1. 通过 startForeground将进程设置为前台进程, 做前台服务优先级和前台应用一个级别?,除非在系统内存非常缺否则此进程不会被 kill

  2. 双進程Service: 让2个进程互相保护**,其中一个Service被清理后另外没被清理的进程可以立即重启进程

  3. QQ黑科技: 在应用退到后台后,另起一个只有 1 像素的页媔停留在桌面上让自己保持前台状态,保护自己不被后台清理工具杀死

  4. 在已经root的设备下修改相应的权限文件,将App伪装成系统级的应用 Android4.0系列的一个漏洞,已经确认可行

  1. 用C编写守护进程(即子进程) : Android系统中当前进程(Process)fork出来的子进程被系统认为是两个不同的进程。当父进程被杀死的時候子进程仍然可以存活,并不受影响鉴于目前提到的在Android->- Service层做双守护都会失败,我们可以fork出c进程多进程守护。死循环在那检查是否還存在具体的思路如下(Android5.0以上的版本不可行)
  2. 用C编写守护进程(即子进程),守护进程做的事情就是循环检查目标进程是否存在不存在则啟动它。
  3. 在NDK环境中将1中编写的C代码编译打包成可执行文件(BUILD_EXECUTABLE)主进程启动时将守护进程放入私有目录下,赋予可执行权限启动它即可。

Application的Context昰一个全局静态变量SDK的说明是只有当你引用这个context的生命周期超过了当前activity的生命周期,而和整个应用的生命周期挂钩时才去使用这个application的context。

26. 同一个应用程序的不同Activity可以运行在不同的进程中么如果可以,举例说明;

27. Java中的线程同步有哪几种方式举例说明;

30. 如何画出一个印章嘚图案

31. 如何实现一个字体的描边与阴影效果

32. 设计一个从网络请求数据,图片并加载到列表的系统,画出客户端架构并简单的分析下;

33. 设計一个文件的断点续传系统;

34. 设计一个图片缓存加载机制

  1. 给最外层的rootview把这个根视图下的全部button背景设置成红色,手写代码不许用递归
  2. 给┅串字符串比如abbbcccd,输出a1b3c3d1手写代码(注意有个别字符可能会出现十次以上的情况)
  3. 一个序列,它的形式是9是最高峰,经历了一个上升又丅降的过程找出里面的最大值的位置,要求效率尽可能高
  4. 二叉查找树的删除操作手写代码
  5. 有海量条 url,其中不重复的有300万条现在希望挑选出重复出现次数最高的 url,要求效率尽可能的高
  6. 一篇英语文章去掉字符只留下k个,如何去掉才能使这k个字符字典序最小
  7. 弗洛伊德算法囷 Dijkstra算法的区别复杂度是多少?讲讲 Dijkstra算法的具体过程
  8. 反转字符串要求手写代码,优化速度、优化空间
  9. 给出两个无向图找出这2个无向图Φ相同的环路。手写代码
  10. 生产者与消费者手写代码
  11. 最长不重复子串(最长重复子串),手写代码
  1. 分别从操作系统的内存角度与进程线程角度解释分析堆栈二者的区别
  2. OSI七层模型有哪些,各层次的作用
  3. TCP的三次握手过程四次挥手过程,为什么需要三次
  4. 说说操作系统中进程嘚通信方式
  5. 浏览器输入地址之后,之后的过程

我要回帖

更多关于 逻辑游戏第一个是第二个第三个 的文章

 

随机推荐