Android学习笔记二

77、java.util.Scanner.match() 方法返回此scanner所执行的最后扫描操作的匹配结果。如果此方法没有匹配已执行,或者如果在最后一次匹配不成功将抛出IllegalStateException异常。

scanner可以允许输入多行,next() 每次取到一个间隔符前面的数据 如: 输入 a b c 取值应该是a,因为a后面有空格
nextLine() 每次取一个换行符前面的数据 如:输入 a b c 回车,取值 就是a b c
nextInt() 是取next() 然后把字符串解析成一个int数字。
hasNextInt() 是判断下次调用next()是否可以得到一个可以安全解析成int的字符串。如果已经到达输入的结尾,或者下一个next()的返回值不能解析为一个数字,即不符合数字的格式,那么返回false。
例如:Scanner input=new Scanner(System.in);
String length=input.next();//输入一个字符串,之后进行回车确认输入
System.out.println("输入的字符串是:"+length);
上面举例的是字符串,之后进行单个字符读取;也可以用以下语句“String length=input.nextLine()”,读取的就是一行(“\n”是换行符,碰到之后就会认为是读取下一行)。
78、注解标签
@Test:测试方法
@Before:初始化方法
@After:释放资源

79、


注意看Stringintshortlongbytebooleancharacter等在sql中对应的类型。


80、 SSM框架(Spring+SpringMVC+MyBatis

http://blog.csdn.net/gebitan505/article/details/44455235/
http://www.cnblogs.com/zyw-205520/p/4767633.html
使用MyBatis Generator自动创建代码
可利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件这样可以省去很多的功夫,将生成的代码copy到项目工程中即可。http://blog.csdn.net/zhshulin/article/details/23912615
注意这里generatorConfig.xml中的数据库链接URL我用的是10.81.78.239:3306/db_zsl(换成自己的ip:3306/数据库),要生成的表 tableName为user_t(换成db_zsl里的你要生成实体类的已有的表名)
81、spket是一个开发JavaScriptjQueryExt_js等的开发工具,它可以是独立的IDE,也可以作为Eclipse的插件使用,下面介绍如何在Eclipse中安装spket插件;
http://download.csdn.net/download/lxz376429624/7686217
http://blog.csdn.net/sanfye/article/details/45120561
82、setContentView(R.layout.main)在Android里面,这句话是什么意思? 
R.layout.main是个布局文件即控件都是如何摆放如何显示的,setContentView就是设置一个Activity的显示界面,这句话就是设置这个这句话所再的Activity采用R.layout下的main布局文件进行布局。 
使用setContentView可以在Activity中动态切换显示的View,这样,不需要多个Activity就可以显示不同的界面,因此不再需要在Activity间传送数据,变量可以直接引用。但是,在android SDK给我们建的默认的Hello World程序中,调用的是setContentView(int layoutResID)方法,如果使用该方法切换view,在切换后再切换回,无法显示切换前修改后的样子,也就是说,相当于重新显示一个view,并非是把原来的view隐藏后再显示。
其实setContentView是个多态方法,我们可以先用LayoutInflater把布局xml文件引入成View对象,再通过setContentView(View view)方法来切换视图。因为所有对View的修改都保存在View对象里,所以,当切换回原来的view时,就可以直接显示原来修改后的样子。
当我们运行程序的时候,有一个setContentView()方法,Activity其实不是显示视图(直观上感觉是它),实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window(PhoneWindow),Activity其实是个控制单元,即可视的人机交互界面。
打个比喻:Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;View就是要显示在显示屏上的信息,这些View都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的一个工具,XML布局文件就是用来生成View的原料。

83、Android 5.0 ART已经取代Dalvik成为默认选项

 相信大家应该都知道了,Android 4.4中谷歌为开发者提供了两种编译模式,一种是默认的Dalvik模式,而另外一种则是 ART模式。

  现在最新的消息显示,谷歌正在对Android系统进行调整,简单点说就是ART已经取代Dalvik成为默认选项。一直以来,Dalvik虚拟机背负着Android应用卡顿的罪名,原因则是应用在运行的过程中,虚拟机Dalvik通过一个叫JIT(Just-in-time)的解释器动态的进行编译并执行,这一过程也拖慢了运行效率。

  与之形成鲜明对比的ART模式,则是在用户安装应用时就进行预编译操作,将原本在程序运行中时的编译动作提前到应用安装时。在省去解释代码这一过程之后,应用的运行效率会更高。

  此外,有开发者往Android开源项目中提交代码时发现,ART已经取代Dalvik成为默认选项,不过Dalvik并没有被放弃,这无疑是个不错的消息,对于今年将要到来的大改版Android 5.0来说,它的系统执行效率会更高。

84、RxJava

RxJava异步实现,是通过一种扩展的观察者模式来实现的。

RxJava 中,Scheduler调度器),相当于线程控制器,RxJava 通过它来指定每一段代码应该运行在什么样的线程。RxJava 已经内置了几个 Scheduler ,它们已经适合大多数的使用场景。有了这几个 Scheduler ,就可以使用subscribeOn()  observeOn() 两个方法来对线程进行控制了。subscribeOn(): 指定subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。observeOn(): 指定Subscriber 所运行在的线程。或者叫做事件消费的线程。

RxJava 提供了对事件序列进行变换的支持,这是它的核心功能之一,也是大多数人说『RxJava 真是太好用了』的最大原因。所谓变换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列。

除了灵活的变换,RxJava 另一个牛逼的地方,就是线程的自由控制。

http://gank.io/post/560e15be2dca930e00da1083

http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650237807&idx=1&sn=3a39bfec92640459ab8d04b6fc452263&chksm=88639a00bf141316e633939788852781b2063e9404247ce38982a31dba8c55be1f6762d915e5&mpshare=1&scene=23&srcid=1202vZFkvfZ0V7IsdeACp7g5#rd

85、混合开发

其实所谓这个混合开发,也就是hybird,就是一些简单的html5native 代码之间的交互。

http://www.cnblogs.com/punkisnotdead/p/5053429.html

http://blog.csdn.net/u012506234/article/details/51447079

86、Spring+Spring MVC+MyBatis

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

87、设置Activity的android:screenOrientation="portrait"属性时,无法切换横竖屏,因此不但不会重新调用各个生命周期方法,而且onConfigurationChanged()方法也不会执行。

 

 launchMode为singleTask的时候,通过Intent启到一个Activity, 如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法。

 

用户正在操作某个Activity,这时如果其他应用程序需要内存。 此时的Activity是Foregroundprocess,应该按照Empty process,Backgroundprocess,Service process,Visibleprocess顺序kill,最后才是前台进程。

88、Message提供了消息池,有静态方法Obtain从消息池中取对象;

Thread默认不提供资源池,除非使用线程池ThreadPool管理;

AsynTask是线程池改造的,池里 默认提供(核数+1)个线程进行并发操作,最大支持(核数  * 2 + 1)个线程,超过后会丢弃其他任务;

Looper,每个Looper创建时创建一个消息队列和线程对象,也不是资源池;

89、style和theme本质上就是同一个东西,xml格式完全相同,只是我用在activity上我就叫他theme,我用在view上我就叫他style。style只能在.xml中使用,不能再java代码中用。唯一的区别就是style里头控制的各个属性了,某些属性是只有针对Activity才能生效的(你view有标题栏嘛有状态栏有导航栏吗嘛?但是反过来Activity内部却有一个继承自View的Decorview) 。所以style可以作用在activity上,但是theme却不能反过来作用在view上。

theme是被final标识了,不能被继承。

90、使用SimpleAdapter作为适配器时,支持三种类型的 View,而且是按照如下顺序进行匹配:

1、继承Checkable接口

2、TextView

3、ImageView

CompoundButton 声明如下:

1

public abstract class CompoundButton extends Button implements Checkable

可见它是实现了Checkable接口的按钮,因此也在入选范围内。但它不支持ProgressBar。

 

91、8中常见的Java排序算法

1)插入排序(直接插入排序、希尔排序)
2)交换排序(冒泡排序、快速排序)
3)选择排序(直接选择排序、堆排序)
4)归并排序
5)分配排序(基数排序)
所需辅助空间最多:归并排序
所需辅助空间最少:堆排序
平均速度最快:快速排序
不稳定:快速排序,希尔排序,堆排序。


http://blog.csdn.net/qy1387/article/details/7752973



92、Arrays.toString(int [])

数值数组是不能够整体输出的,你可以使用循环输出
for(i=0;i<10;i++)
    System.out.println(a[i]+" ");
而借助Arrays.toString(a)就节省了上面的循环步骤,而一步输出(当然,调用函数的内部进行了处理)。
93、大多数 JVM内存区域划分为 Method Area(Non-Heap)(方法区 ,Heap( , Program Counter Register(程序计数器 ,   VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack   本地方法栈 ),其中Method Area  Heap 是线程共享的  ,VM Stack,Native Method Stack  和Program Counter Register  是非线程共享的。
JVM初始运行的时候都会分配好 Method Area(方法区) Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) ,   VM Stack(虚拟机栈)和Native Method Stack  (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么我把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说知发生在Heap上)的原因。
程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的。Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的。原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。它与堆一样,是被 线程共享 的区域。
94、JDBC提供了StatementPreparedStatement  CallableStatement三种方式来执行查询语句,其中Statement用于通用查询,PreparedStatement用于执行参数化查询,而CallableStatement则是用于存储过程。
对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,由于 PreparedStatement 对象已预编译过,所以其执行速度要快于      Statement 对象”。 PreparedStatement可以阻止常见的SQL注入式攻击。 PreparedStatement中,“?” 叫做占位符,一个占位符必定只能对应一个值。
95、SPRING的事务传播特性

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 

PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 

PROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 

96、servletcgi

servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。
CGI不可移植,为某一特定平台编写的CGI应用只能运行于这一环境中。每一个CGI应用存在于一个由客户端请求激活的进程中,并且在请求被服务后被卸载。这种模式将引起很高的内存、CPU开销,而且在同一进程中不能服务多个客户。
 

97、servlet service

不管是post还是get方法提交过来的连接,都会在service中处理。doGet/doPost 则是在javax.servlet.http.HttpServlet中实现的。
service()是在javax.servlet.Servlet接口中定义的。
service判断请求类型,决定是调用doGet还是doPost方法。
98Servlet的生命周期

Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。

(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet

(2)创建:通过调用servlet构造函数创建一个servlet对象

(3)初始化:调用init方法初始化

(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求

(5)卸载:调用destroy方法让servlet自己释放其占用的资源

创建Servlet的实例是由Servlet容器来完成的,且创建Servlet实例是在初始化方法init()之前。
在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法。
在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源。destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法。
99init()方法是servlet生命的起点。一旦加载了某个servlet,服务器将立即调用它的init()方法。service()方法处理客户机发出的所有请求。
destroy()方法标志servlet生命周期的结束。servlet在多线程下其本身并不是线程安全的,在Servlet类中可能会定义共享的类变量,这样在并发的多线程访问的情况下,不同的线程对成员变量的修改会引发错误。
100从action类上分析:
1.Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 
2. Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2Action对象。
 
从Servlet 依赖分析: 
3. Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest  HttpServletResponse 被传递给execute方法。 
4. Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的requestresponse。但是,其他的元素减少或者消除了直接访问HttpServetRequest  HttpServletResponse的必要性。

从action线程模式分析: 
5. Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 
6. Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
101AWTSwing

AWTSwing都是java中的包。

AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。

Swing :为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。 

AWTSwing之间的区别:
       1)AWT
是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWTJava程序,其运行速度比较慢。
       2)AWT
的控件在不同的平台可能表现不同,而Swing在所有平台表现一致。即Swing在不同的操作系统中显示相同的风格。

102、forwardredirect是jsp中常问的两个问题

forward,请求转发:服务器获取跳转页面内容传给用户,用户地址栏不变。

redirect,请求重定向:是服务器向用户发送转向的地址,redirect后地址栏变成新的地址。

103、加载驱动方法

1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

2. DriverManager.registerDriver(newcom.mysql.jdbc.Driver());

3.System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");

 

104、sleep()wait()
Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。
sleep是线程类(Thread)的方法,wait是Object类的方法;
sleep不释放对象锁,wait放弃对象锁;
sleep暂停线程、但监控状态仍然保持,结束后会自动恢复;
wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入就绪状态。
105、//在stack中分配3个内存,名字为a, b, c
Square a, b, c;     //声明了3个Square类型的变量a, b, c
//在heap中分配了一块新内存,里边包含自己的成员变量width值为48L,然后stack中的a指向这块内存
a = new Square(42L);
//在heap中分配了一块新内存,其中包含自己的成员变量width值为48L,然后stack中的b指向这块内存
b = new Square(42L);   
//stack中的c也指向b所指向的内存
c = b;
//在stack中分配了一块内存,值为42
long s = 42L; 
如图所示:
 
106、 

107、关于struts项目中的类与MVC模式的对应关系:
Jsp文件实现视图View的功能;
ActionServlet这一个类是整个struts项目的控制器;
structs框架基于mvc模式开发,存在与mvc工作流程一一对应的关系,即controller…model…view… structs对应的类分别是ActionServlet……Action/ActionForm……View即Jsp。
108、动态INCLUDE用jsp:include动作实现<jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。各个文件分别先编译,然后组合成一个文件。
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>。先将文件的代码被原封不动地加入到了主页面从而合成一个文件,然后再进行翻译,此时不允许有相同的变量。
    静态include的结果是把其他jsp引入当前jsp,两者合为一体;动态    include的结构是两者独立,直到输出时才合并。
109、本地广播全局广播有什么差别?
BroadcastReceiver是针对应用间、应用与系统间、应用内部进行通信的一种方式。
LocalBroadcastReceiver仅在自己的应用内发送接收广播,也就是只有自己的应用能收到。

LocalBroadcastManagerAndroid Support包提供了一个工具,是用来在同一个应用内的不同组件间发送Broadcast的。

使用LocalBroadcastManager有如下好处:

  • 发送的广播只会在自己App内传播,不会泄露给其他App,确保隐私数据不会泄露
  • 其他App也无法向你的App发送该广播,不用担心其他App会来搞破坏
  • 比系统全局广播更加高效
110、国内一线互联网公司面试题
http://blog.csdn.net/gaiyindexingqiu/article/details/53400759
111、intentService
Service里面我们肯定不能直接进行耗时操作,一般都需要去开启子线程去做一些事情,自己去管理Service的生命周期以及子线程并非是个优雅的做法;好在Android给我们提供了一个类,叫做IntentService
http://blog.csdn.net/lmj623565791/article/details/47143563
使用IntentService最起码有两个好处,一方面不需要自己去new  Thread了;另一方面不需要考虑在什么时候关闭该Service了。
IntentServiceService类的子类,用来处理异步请求。客户端可以通过startService(Intent)方法传递请求给IntentService
IntentServiceonCreate()函数中通过HandlerThread单独开启一个线程来处理所有Intent请求对象(通过startService的方式发送过来的)所对应的任务,这样以免事务处理阻塞主线程。执行完所一个Intent请求对象所对应的工作之后,如果没有新的Intent请求达到,则自动停止Service;否则执行下一个Intent请求所对应的任务。
http://blog.csdn.net/hudashi/article/details/7986130
112、launch mode应用场景

standard,创建一个新的Activity

singleTop,栈顶不是该类型的Activity,创建一个新的Activity。否则,onNewIntent

singleTask,回退栈中没有该类型的Activity,创建Activity,否则,onNewIntent+ClearTop

singleInstance,回退栈中,只有这一个Activity,没有其他Activity

注意:

1.   设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinityTask存在;如果存在这样的Task,它就会在这个Task中启动,否则就会在新的任务栈中启动。因此,如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。

2.   如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity 实例会位于任务的Stack顶端中。

3.   在一个任务栈中只有一个”singleTask”启动模式的Activity存在。他的上面可以有其他的Activity。这点与singleInstance是有区别的。

singleTop适合接收通知启动的内容显示页面。

例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。

singleTask适合作为程序入口点。

例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

singleInstance应用场景:

闹铃的响铃界面。你以前设置了一个闹铃:上午6点。在上午558分,你启动了闹铃设置界面,并按 Home 键回桌面;在上午559分时,你在微信和朋友聊天;在6点时,闹铃响了,并且弹出了一个对话框形式的 Activity(名为 AlarmAlertActivity) 提示你到6点了(这个 Activity 就是以 SingleInstance 加载模式打开的),你按返回键,回到的是微信的聊天界面,这是因为 AlarmAlertActivity 所在的 Task 的栈只有他一个元素,因此退出之后这个 Task 的栈空了。如果是以 SingleTask 打开 AlarmAlertActivity,那么当闹铃响了的时候,按返回键应该进入闹铃设置界面。

113、AccessibilityService

 Android进阶——学习AccessibilityService实现微信抢红包插件

简单的说AccessibilityService就是一个后台监控服务,当你监控的内容发生改变时,就会调用后台服务的回调方法。

http://blog.csdn.net/qq_30379689/article/details/53242953

DDMS界面有个 Dump View Hierarchy for UI Automator,干什么用的?

这个是用来分析你当前界面的View层次节点的,假设你现在是在用模拟器手机做调试,你用这个他就会构建一个你先在手机或模拟器显示界面的View的层次图,你可以做一些性能的调优之类的。
http://www.cnblogs.com/xdindex/p/4619675.html
114、如何在自己程序跳转至微信,新浪,腾讯微博,,QQ空间
http://www.68idc.cn/help/buildlang/ask/20150323292891.html
115、使用H5搭建webapp主页面

http://blog.csdn.net/qq_30379689/article/details/52648978

android的webview中的h5页面里jsjava相互调用参考理解下面链接里的代码http://download.csdn.net/download/qiushi_1990/9324875

android的WebView、WebViewClient、WebChromeClient的关系http://blog.sina.com.cn/s/blog_71e00b8801017tei.html

JAVA字符串格式化-String.format()的使用

http://blog.csdn.net/lonely_fireworks/article/details/7962171/

WebView详解与简单实现AndroidH5互调

优势:使用H5实现的功能能够在不升级App的情况下动态更新,而且可以在Android或iOS的App上同时运行,节约了成本,提高了开发效率。 
原理:其实就是Java代码和JavaScript之间的调用。

http://blog.csdn.net/qq_24530405/article/details/52067474

WebView常用方法

loadUrl、setWebViewClient、setWebChromeClient、setDownloadListener、goBack()

易企秀官网http://www.eqxiu.com/

60分钟学会制作易企秀H5场景http://class.qq.com/class/13657/p62157.html

凡科http://www.faisco.com/

116、Java注解



元注解:注解的注解。

117、instanceof

Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
 
用法:
result = object instanceof class

参数:
Result
:布尔类型。
Object
:必选项。任意对象表达式。
Class
:必选项。任意已定义的对象类。
说明:
如果 object class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object null,则返回 false

http://www.cnblogs.com/obama/p/3292335.html
119[java后端]线下笔试及面试复习资料[]——手写代码
https://m.nowcoder.com/discuss/19954?type=1&order=0&pos=14&page=1?from=wb
120JVM
JAVA中将内存的控制交给JVM来实现,方便了JAVA程序猿,当然牺牲了一部分效率,不过总体来看是值得的。在JVM的内存模型中,堆内存是JAVA内存区域中最大的一部分,GC主要就是发生在堆中,用来回收那些无用的对象。这样直接就引申出了第一个问题:什么样的对象需要被回收?判断条件是什么?如何判断?

没用的对象需要被回收,一个对象被创建,如果被引用了,那这个对象肯定是有用的,如果引用全失效了,那就是没用的对象了,需要被回收。基于这个思想,引用计数法诞生了。给每个对象添加一个引用计数器,对象每被引用一次,引用计数器就+1,引用失效时就-1。那么判断一个对象是否有用的条件就变成了对这个计数器值得判断了,如果为0,那么被回收,如果为>0,那么保留。但是这种方式会产生一个问题,就是对象之间的循环引用无法被识别,即使这两个对象不能被访问,但是它们之间互相引用着对方,故而计数器肯定>0,那么就不能被回收。JVM中并没有使用引用计数算法,而是使用了根搜索算法既然根搜索算法需要考虑到对象之间的引用,那么就要说一下JAVA中对象的引用类型了:

JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用软引用(SoftReference类)弱引用WeakReference类)虚引用PhantomReference类),这四种引用的强度依次减弱。

1) 强引用就是指在程序代码之中普遍存在的,类似 “Object obj =new Object()” 这类的引用,只要强引用还存在,垃圾回收器永远不会回收被引用的对象。我们也正是利用这个原理来重现了OOM异常。

2) 软引用(SoftReference类)是用来描述一些还有用但并非需要的对象,对于软引用关联着的对象,在系统将要发生内存异常之前,将会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存异常

3) 弱引用(WeakReference类)也是用来描述非必需对象的,被弱引用关联的对象只能生存到下一次GC发生之前,当垃圾收集器工作时,无论当前内存释放足够,都会回收掉只被弱引用关联的对象

4) 虚引用(PhantomReference类)也称为幽灵引用或者幻影引用,它是最弱的一种引用关系,一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例,对一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。

http://blog.csdn.net/zhshulin/article/details/50583724

121、垃圾收集器

现在商用的JVM中的垃圾收集采用的是分代收集算法,即针对不同年代采用不同的收集算法。在JVM中,GC主要作用于堆内存中,堆内存又被划分为新生代和老年代,由于新生代对象绝大多数是朝生夕死,而老年代相对存活时间就很长,故而需要使用不同的垃圾收集机制,所以垃圾收集器也就分为新生代收集器老年代收集器,两者相互组合进行JVM堆内存的空间回收。

新生代的垃圾收集器有:Serial收集器、ParNew收集器、Parallel Scavenge收集器。

老年代的垃圾收集器有:Serial Old收集器、ParallelOld收集器、CMS收集器。

G1收集器(G1是一款面向服务端应用的垃圾收集器)。

GC的具体实现就是垃圾收集器,目前尚没有一个垃圾收集器是完美的,需要配合使用。

http://blog.csdn.net/zhshulin/article/details/50614477

122、Android 使用 Socket 对大文件进行加密传输

http://www.codeceo.com/article/android-socket-encrypted-transmission.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值