公司面试题 java面试题

14.KVO实现原理?

   key value observe 观察  实现都是基于runtime 当一个对象被第一次观察时,会生成一个派生类,派生类重写基于基类的setter 实现真正的通知
   主要依赖两个方法,willchangevalueforkey  didchangevalueforkey 一个记录旧数据,kvo的实现机制实际是重写了class,而并非是当前类

   kvc:
   主要是通过交换两个对象的isa指针,首先观察有没有setter 其次观察 _property 寻找成员属性

 

17.iOS中的NSCopying协议,copy,MutableCopy的区别

 18.堆和栈的区别,工程项目中的哪些数据是储存在堆哪些在栈中

 19.iOS开发中用过哪些测试性能的工具

 20.instruments它为什么能检测内存泄漏

 21.cocoaPods的实现思路,为什么没有使用cocoaPods管理自己的SDK

 


https://blog.csdn.net/sinat_29998157/article/details/80404940?utm_source=blogxgwz7

 

 

1.

https://blog.csdn.net/xunyn/article/details/8302787

 

1.   Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

 

2.#import 跟#include 又什么区别,@class呢, #import<> 跟 #import”"又什么区别?

#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。

 

3. 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

readwrite 是可读可写特性;需要生成getter方法和setter方法时

readonly 是只读特性  只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变

assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;

retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;

copy 表示拷贝特性,setter方法将传入对象复制一份;需要完全一份新的变量时。

nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic

 

4.写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString *name

- (void)setName:(NSString *) str
{
[str retain];
[name release];
name = str;
}
- (void)setName:(NSString *)str
{
id t = [str copy];
[name release];
name = t;
}
 

5.对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?

编译时是NSString的类型;运行时是NSData类型的对象

 

6.常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int

object-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long。 

7.id 声明的对象有什么特性?

Id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;

 

8.Objective-C如何对内存管理的,说说你的看法和解决方法?

Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。

 

9.内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象

需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

谁申请,谁释放

遵循Cocoa Touch的使用原则;

内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property设置特性时,一定要用对特性关键字,对于“内存泄漏”,一定要申请了要负责释放,要细心。

关键字alloc 或new 生成的对象需要手动释放;

设置正确的property属性,对于retain需要在合适的地方释放,

 

10.如何对iOS设备进行性能测试?

Profile-> Instruments ->Time Profiler

11.看下面的程序,第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什么?

=======================================================
NSMutableArray* ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"test"];
[strretain];
[aryaddObject:str];
NSLog(@"%@%d",str,[str retainCount]);
[strretain];
[strrelease];
[strrelease];
NSLog(@"%@%d",str,[str retainCount]);
[aryremoveAllObjects];
NSLog(@"%@%d",str,[str retainCount]);
=======================================================
str的retainCount创建+1,retain+1,加入数组自动+1

3

retain+1,release-1,release-1

2

数组删除所有对象,所有数组内的对象自动-1

1

12. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject: afterDelay: 或者使用GCD的函数:dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 2秒后异步执行这里的代码...
});

13.描述一下iOS SDK中如何实现MVC的开发模式

MVC是模型、视图、控制器开发模式,对于iOS SDK,所有的View都是视图层的,它应该独立于模型层,由视图器来控制。所有的用户数据都是模型层,它应该独立于视图。所有的ViewController都是视图器,由它负责控制视图,访问模型数据。

 

 

  • 1.说下线程和进程的区别

  • 2.如何保证线程安全

  • 3.写个算法,输出2~100的素数(然后问你怎么优化,还可以怎么优化,然后还可以怎样优化.....)

  • 4.了解哪些设计模式

  • 5.MVC设计模式的思想是什么?在项目中的运用,然后对比MVVM设计模式

  • 6.堆和栈的区别,工程项目中的哪些数据是储存在堆哪些在栈中

  • 7.iOS中的NSCopying协议,copy,MutableCopy的区别

  • 8.解释属性修饰关键词的作用(weak,strong,copy,readOnly,assgin,nonatomic等)

  • 9.最近看过哪些书?目录结构是怎样的?哪部分内容印象最深?了解过作者吗?

  • 10.你还有什么问题问我?

 

https://github.com/JiaZhiH/JiaZhiH.github.io/blob/279b3e12bb027f48dc2d057f36dac783ab42812d/_posts/2018-02-12-%E9%A1%B9%E7%9B%AE%E4%B8%AD%E4%BC%9A%E7%94%A8%E5%88%B0%E7%9A%84%E7%9F%A5%E8%AF%86.md

2.Java面试题

 

https://github.com/iamdsyang/MyPic/blob/42c9954af92428af620f7fdb3086e50a66ea880a/Java%E5%9F%BA%E7%A1%80%E9%9D%A2%E8%AF%95%E7%9F%A5%E8%AF%86.md

说说ACID?

  • 原子性(Atomicity):事务的所有操作要么全部提交成功,要么全部失败回滚。
  • 一致性(Consistency):数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。
  • 隔离性(Isolation):一个事务所做的修改在最终提交以前,对其它事务是不可见的。
  • 持久性(Durability):一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。

 

JVM

  1. 说一下jvm的主要组成部分?及其作用?
  2. 说一下jvm运行时数据区
  3. 说一下堆栈的区别?
  4. 队列和栈是什么?有什么区别?
  5. 什么是双亲委派模型?
  6. 说一下类加载的执行过程?
  7. 怎么判断对象是否可以被回收?
  8. java中都有哪些引用类型
  9. 说一下jvm有哪些垃圾回收算法?
  10. 说一下jvm有哪些垃圾回收器?
  11. 详细介绍一下CMS垃圾回收器?
  12. 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
  13. 简述分代垃圾回收器是怎么工作的?
  14. 说一下jvm调优的工具
  15. 常用的jvm调优的参数都有哪些?

https://github.com/KeepSimpleHeart/blog/blob/1fd20fa49d31fdbb37d1c834c7d1d7352a0a9098/java/%E9%9D%A2%E7%BB%8F/208%E9%9D%A2%E8%AF%95%E9%A2%98%E7%B3%BB%E5%88%97/Java%20%E9%9D%A2%E8%AF%95%E6%94%B6%E5%88%B0offer%E5%BF%85%E5%A4%87%20208%20%E9%81%93%E9%9D%A2%E8%AF%95%E9%A2%98%E7%B3%BB%E5%88%97%E2%80%94%E2%80%94%E9%A2%98%E7%9B%AE(%E7%9F%A5%E4%B9%8E).md

 

posted @ 2020-06-08 16:53  lianhuaren  阅读(14)  评论(0编辑  收藏  举报