J2SE基础问题汇总

1.  九种基本数据类型的大小,以及他们的封装类
2.  Switch能否用string做参数?
3. equals()与==的区别
4. Object有哪些公用方法?
5. Java的四种引用,强弱软虚,用到的场景。
6. Hashcode的作用
7. ArrayList、LinkedList、Vector的区别
8. String、StringBuffer与StringBuilder的区别
9. Map、Set、List、Queue、Stack的特点与用法
10. HashMap和HashTable的区别
11. HashMap和ConcurrentHashMap的区别
12. TreeMap、HashMap、LinkedHashMap的区别。
13. Collection包结构,与Collections的区别
14. try catch finally,try里有return,finally还执行么
15. Exception与Error包结构。常见的OOM和SOF。
16. Java面向对象的三个特征与含义
17. Override和Overload的含义去区别
18. Interface与abstract类的区别
19. Static inner class 与non static inner class的区别
20. Java多态的实现原理
21. 实现多线程的两种方法:Thread与Runnable
22. 线程同步的方法:synchronized、lock、reentrantLock等
23. 锁的等级:方法锁、对象锁、类锁。
24. 写出生产者消费者模式。
25. ThreadLocal的设计理念与作用。
26. ThreadPool用法与优势。
27. Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等
28. wait()和sleep()的区别
29. foreach与正常for循环效率对比
30. Java IO与NIO
31. 反射的作用与原理
32. 泛型常用特点:List<String>能否转为List<Object>
33. 解析XML的几种方式的原理与特点:DOM、SAX、PULL
34. Java与C++对比
35. Java 1.7与1.8新特性
36. 设计模式:单例、工厂、适配器、责任链、观察者等等
37. JNI的使用
2016/9/26 15:32 下午 posted in  Java

求职

9月开始到现在,陆陆续续也面了5、6个公司,现在暂时告一个段落。
每家公司面试的风格都不一样,根据面试官问的问题可以分为以下几类:

面试

现在对过去的几次面试做个总结,每家公司面试的风格都不一样,根据面试官问的问题可以分为以下几类:

  • 1.智力类。这类公司喜欢问智力题,比如10个人互相有握手,那么他们总共握了几次手?一个凸多边形的外接矩阵怎么求?等等,从头到尾都是。
  • 2.代码类。直接上来就给题目让写代码。leet code上的题目。
  • 3.工程类。主要关注的点在你做的项目上,使用了什么技术,怎么实现的,还有没有其它的实现方式,这样做有什么缺陷,等等。
  • 4.基础类。对编程语言方面问的很深入,比如JVM模型,GC机制,GC算法,分配过程等等。
  • 5.常规问题。怎么学习的?对未来有什么规划?你还有什么要问我的?

笔试

笔试题依据类型可以分为以下几类:

  • 1.智力题。特别是BAT,选择题基本上都是智力题。这方面只能靠平时的积累和总结了。
  • 2.基础题。在试卷中有出现,占比根据不同的公司来决定,有些的比例远不如智力题。
  • 3.编程题。几乎是重中之重。最爱考的是字符串处理及动态规划问题。
  • 4.应用题。这类题实际上也是在变相地考察基础,但是比单纯直接地考察基础的要求要高的多。阿里最后一个题是让设计实现一个HotSpot虚拟机。当时我就???也有让直接设计一个数据库的题型。

总结

准备了很多,但仍然不够充分,每次面试总有答不上来的题。那些题实际上也不是很难,而是没有听说过和接触过。这也是这么多面试的一次收获,我还有那么多需要知道的东西。

这个过程中,对于JAVA基础,JVM内存管理方面的内容我有做一个笔记总结,放在word文档中。这几天会陆陆续续整理后放上来。一来是这段时间学习的总结以便以后在复习的时候可以快速定位不牢固的知识,二来希望我的总结对别人也能有帮助。

对于动态规划的思想还需要更多的练习,简单的可以,复杂一点总是让我花很多时间,最后还总不能全部AC,总是差那么一点。

感谢网络上积极分享知识心得的朋友。我现在准备好好睡一觉。

2016/9/25 16:35 下午 posted in  Diary

iOS开发基础(二)

ViewController

作为连接视图View和模型Model的桥梁(控制器Controller),从名字就可以看得出来,它是用来管理View的。除此之外,它还承担着传递数据,相应用户操作,内存管理,状态保持和适应设备的功能。

先来看看它的生存周期:

当一个viewController它管理的view出现或者消失的时候会引发相应的方法,如果有需求,可以在对应的方法里写代码来处理相应的事务。

默认状态下,Xcode会将与ViewController同名的Xib文件关联到对应的Controller上。如MyViewController关联到MyView.xib或者MyViewCon.xib。

除此之外也可以用代码来制定加载制定的xib:

[UIViewController initWithNibName:@"MyView"];

或者在IB中指定ViewController,如下:

跳转

在viewcontroller中可以跳转到另一个viewcontoller:

[self presentViewController: animated: completion:];
[self showViewController: sender:];

撤销当前的view可以使用:

[self dismissViewControllerAnimated: completion:];

回传数据

在其中可以设定回传数据或者在撤销当前view之后执行一段代码。completion是一个代码块block。
实际上是使用了观察者模式来通知第一个view,并将数据传给它。

//在第二个view中,发送do发生变化的消息,并且将数据存在字典中回转给第一个view
[self dismissViewControllerAnimated:YES completion:^{
        NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"do" object:self userInfo:dict];
    }];

//在第一个view中的viewDidLoad方法中
//注册观察者,如果do对象有变化就执行Test方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(Test:) name:@"do" object:nil];

- (void)Test:(id)sender{
    NSLog(@"%@", sender);
}

执行结果:

2016-06-02 17:52:33.594 NibVC[37096:5919151] NSConcreteNotification 0x7fd6495118e0 {name = do; object = <SecondViewController: 0x7fd6494b82d0>; userInfo = {
    key1 = value1;
    key2 = value2;
}

这种方法不仅可以用于viewController的回传值,还可以用于各个对象之间的消息传递,只需要注册观察者,和发送消息即可。

Storyboard

Storyboard中文译为故事版,也就是做界面的地方,app的应用逻辑和导演讲故事是不是很像呢?在这之前,苹果使用的是xib文件来做的界面。storyboard的有点在于对多个view的管理比xib的要好。

大多数操作就是托控件到view上,如果要关联到.m文件中则要按住Ctrl键+上控件拖到对应的.m文件上即可选择是添加为属性IBOutlet还是方法IBAction。

场景的跳转

Storyboard的场景跳转使用的是Segue,按下Ctrl拖住一个按钮到下一个场景上即可实现。
可以对Segue进行命名,以便在代码中使用Segue。

[self performSegueWithIdentifier:@"" sender:sender];

也可以在代码中显示Storyboard里的View Controller:

id vc = [self.storyboard instantiateViewControllerWithIdentifier:@""];
[self showViewController:vc sender:sender];

返回

在对应的vc中添加,再在Storyboard中将按钮的方法设置为以下方法。ForSegue可以改变为其它的名字。
```
- (void)unwindForSegue:(UIStoryboardSegue*)unwindSegue{

}
```

App的声明周期

Navigation Controller

NavigationController是一种高效管理多个界面的工具,它可以提供在多个view之间方面地跳转。

每个被管理的ViewController自己提供:
内容,导航栏标题,导航栏上的自定义按钮,或者可选的工具栏按钮。

数据的传递可以通过Segue或者Delegate,Segue上面提到过,下面就列出使用Delegate的方法:

- (void)navigationController: willShowViewController: animated:
- (void)nagivationController: didShowViewController: animated:

代码中使用

//创建
- initWithRootViewController:
- initWithNavigationBarClass:toolbarClass:
//跳转
- pushViewController:animated:
- popViewControllerAnimated:
- popToRootViewControllerAnimated:
- popToViewController:animated:

Tabbar Controller


TabbarController是另一种管理多个ViewController的方式。
使用方法和NavigationController非常相似。还可以和它结合起来一起使用。

2016/6/2 17:10 下午