基础篇

Q1

访问修饰符 public , private , protected 以及不写时的区别?

类的成员不写访问修饰符时,默认的是default。

Q2

Stirng是最基本的数据类型吗?

不是。

java中的基本数据类型就八种: byte, short, int, long, float, double, char,

boolean。

剩下的都是引用类型(reference type)。

Q3

float f = 1.1; 正确吗?

不正确。

1.1是双精度, 将双精度赋值给浮点型,属于向下转型,会造成精度的丢失.如果要强制类型转换,可以写成这样 float f = (float)1.1; 或者 float f=1.1F;

Q4

short a = 1; a = a + 1 和 short a = 1 ; a += 1 有什么区别?

对于a = a + 1 因为1是int值类型,所以计算的结果是int,要赋值给short,需要强制类型装换才能赋值给short。

对于a += 1; 其相当于 a = (short)(a+1) ;其中已经做了强制类型装换。

Q5

下面代码打印结果?

Integer a = 100, b = 100, c = 130, d = 130 ;

System.out.println(a ==> b);

System.out.println(c == d);

第一个是true,第二个是false.

因为a,b,c,d四个变量都是integer对象的引用,所以==比较的不是值,而是引用。如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象。

Q6

Java中如何跳出多重嵌套循环?

在最外层循环前加标记A,利用break A;可以跳出循环。

Q7

String类可以被继承吗?

不可以。因为String类是final类。

Q8

String 和 StringBuilder , StringBuffer 的区别?

String是只读字符串,String引用的字符串内容是不能被改变的。而StringBuffer和StringBuilder是可变字符串。

StringBuilder和StringBuffer的用法相同, 区别是StringBuffer被synchronized修饰,效率比StringBuilder低。

Q9

构造器是否可以被重写?

构造器不能被继承,因此不能被重写,但是可以被重载。

Q10

int a = 1; int b = 2; 怎么让a,b值交换?

a = a ^ b;

b = a ^ b;

a = a ^ b;

中级篇

Q1

抽象类和接口的相同点和不同点。

1.抽象类和接口都不能实例化对象,但是可以定义抽象类和接口类型的引用。

2.继承抽象类和实现接口都要对其中的抽象方法全部实现。

3.接口比抽象类更加抽象,抽象类中可以定义构造器,可以有抽象方法和具体方法。

4.接口中方法全部都是抽象方法。

5.抽象类中的成员可以是 private , protected , public ,接口全部都是 public 。

6.抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。

7.有抽象方法的类必须声明为抽象类,而抽象类未必要有抽象方法。

Q2

java中会存在内存泄露吗?

理论上java不会存在内存泄露的问题,应为有垃圾回收机制(GC).然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此会导致内存泄露。

例如:hibernated的Session中的对象属于持久态,垃圾回收器不会回收这些对象,这些对象中有可能存在无用的垃圾对象。如果关闭不及时,一级缓存就可能导致内存泄露。

Q3

try{ }里面return, finally里的代码会不会执行,什么时候被执行?

会执行。在方法返回给调用者前执行,因为如果存在finally代码块, try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后在返回。

Q4

List,Map,Set 三个接口存取元素时,各自有什么特点?

List以特定的索引来存取元素,可以有重复元素,Set不能存放重复元素。

Map保存键值对的映射,映射关系可以是一对一或多对一。

Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储理论存取时间复杂度是O(1)。

Q5

Thread类中的sleep()和对象的wait()有什么区别?

sleep()方法是线程类的静态方法,调用此方法会让当前线程暂停执行指定时间。将CPU时间片分给其他线程,但是对象的锁依然保持, 休眠时间结束会自动回复到就绪状态。

wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁,线程暂停执行,进入对象的等待池,只有调用对象的notify()方法或notifyAll()方法时,才能唤醒等待池中的线程进入等锁池,如果线程重新获得对象的锁就可以进入就绪状态。

Q6

当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?

不能。其它线程只能访问该对象的非同步方法,同步方法则不能进入。

因为非静态方法上的synchronized修饰符要求执行方法时要获得对象的锁,如果已经进入A方法说明对象锁已经被取走,那么试图进入B方法的线程就只能在等锁池(注意不是等待池哦)中等待对象的锁。

Q7

说说synchronized关键字的用法?

synchronized关键字可以将对象或者方法标记为同步,以实现对对象和方法的互斥访问,可以用synchronized(对象) { … }定义同步代码块,或者在声明方法时将 synchronized 作为方法的修饰符。

Q8

Java如何实现序列化,有什么意义?

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。

序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题),要实现序列化,让类实现Serializable接口.该接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过writeObject(Object)方法就可以将实现对象写出。

如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆。

Q9

线程的sleep()方法和yield()方法有什么区别?

sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;

线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;

sleep() 方法声明抛出 InterruptedException ,而yield()方法没有声明任何异常;

sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性。

Q10

说说你对同步和异步的理解。

如果系统中存在临界资源(资源数量少于竞争资源的线程数量的资源),例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就必须进行同步存取(数据库操作中的排他锁就是最好的例子)。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。事实上,所谓的同步就是指阻塞式操作,而异步就是非阻塞式操作。

高级篇

Q1

转发 (forward) 和重定向 (redirect) 的区别?

forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的。

所以它的地址栏中还是原来的地址redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址,很明显redirect无法访问到服务器保护起来资源,但是可以从一个网站redirect到其他网站。

Q2

说一说spring 中依赖注入和AOP的实现机制。

实现依赖注入的方式包括:构造器注入、设值注入和接口(回调)注入。Spring中可以通过设值注入(setter方法注入)和构造器注入实现IoC,推荐使用的方式为设值注入。

实现AOP的方式包括:编译时AOP(需要特殊的编译器)、运行时AOP(代理模式)、加载时AOP(需要特殊的类加载器)。

Spring中使用了运行时的AOP,主要通过代理的方式对原来的代码进行增强实现。对于实现了接口的类,Spring通过Java的动态代理(请参考Proxy类和InvocationHandler接口)来进行增强;对于没有实现接口的类,Spring使用第三方字节码生成工具CGLIB,通过继承的方式对原有代码进行增强。

Q3

什么是ORM?

对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;

简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。

Q4

简述一下面向对象的"六原则一法则"。

单一职责原则:一个类只做它该做的事情。其核心就是我们常说的"高内聚",写代码最终极的原则只有六个字"高内聚、低耦合",就像葵花宝典的八字中心思想一样"欲练此功必先自宫"一样重要。

开闭原则:软件实体应当对扩展开放,对修改关闭。

要做到开闭有两个要点:抽象是关键,一个系统中如果没有抽象类或接口系统就没有扩展点;封装可变性,将系统中的各种可变因素封装到一个继承结构中。

依赖倒转原则:面向接口编程,就是声明方法的参数类型、方法的返回类型、变量的引用类型时,尽可能使用抽象类型而不用具体类型,因为抽象类型可以被它的任何一个子类型所替代

里氏替换原则:任何时候都可以用子类型替换掉父类型接口。

隔离原则:接口要小而专,绝不能大而全。接口也应该是高度内聚的。Java中的接口代表能力、代表约定、代表角色,能否正确的使用接口一定是编程水平高低的重要标识。

聚合复用原则:优先使用聚合或合成关系复用代码。

迪米特法则:迪米特法则又叫最少知识原则,一个对象应当对其他对象有尽可能少的了解。

今天的文章就分享到这里啦,喜欢编程的小伙伴可以关注我哦!有学习方面的问题可以私信回复:学习!

java葵花宝典_JAVA程序员想入职跳槽,这些基本功一定要做好,你给自己打几分?...相关推荐

  1. 读《程序员的入职锦囊妙计》有感

    最经看了一本<程序员的入职锦囊妙计>,发现里面说的东西还不错,就总结了一下和大家分享-- 1.       我们要事先了解时间的本身,判断这样的工作是否适合自己 2.       学会与人 ...

  2. java p8级别_JAVA程序员月入5000+很迷茫,如何能在一年内改变达到月入过万?

    生活中有那样一群人,他们总能是很聪明有主见,知道自己在什么时候该做什么.在什么时候该选什么,我们也能这样该多好呀!不用羡慕他们,看完本文你就能知道. 正文: 从标题来看,主线不是"如何能在一 ...

  3. 超300程序员受益入职的面试经验

    关于简历 一份简历在HR那里停留不超过15秒 十秒钟原则 简历长度以A4纸1-2页为准,长度越长越让人抓不住重点,被阅读的可能性越小. 清晰原则 一定要排版整齐,例如简历排版时需要综合考虑字体大小.行 ...

  4. 程序员刚入职很痛苦_在中国,程序员这行能干一辈子吗?

    点击上方蓝色字体"腾讯创业" 选择关注公众号 创投圈大小事,你都能尽在掌握 腾讯创业 | ID:qqchuangye 随着互联网行业发展的不断深化,或许也是时候从文化.机制上去探讨 ...

  5. 程序员初入职场月薪三千,网友:3000元?你是在丢码农的脸吗

    放眼各行各业,我们经常会看到有些行业的工资确实要比其他行业工资高出几个等级,就拿我们日常生活中离不开的互联网行业来说,很多人一听说你是程序员,那他们的第一印象就会觉得你的工资肯定很高.在外人眼中程序员 ...

  6. OSChina 周三乱弹 ——程序员从入职到跑路

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @温家成 :分享陈奕迅的单曲<沙龙> <沙龙>- ...

  7. 跨专业本科毕业小白程序员的入职心得——第一篇

    睡前随便写点软文,一是为了以后有时间可以自己回忆一下自己的求职之路,如果恰巧这篇文章对其他刚毕业的同学有一些帮助,我将感到十分荣幸. 你是否也是刚毕业不久,或者还未毕业,对未来的工作感到一片迷茫?感到 ...

  8. 程序员初入职场第一年—— 程序员羊皮卷 连载 13

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow <程序员羊皮 ...

  9. 程序员初入职场,你应该遵守什么“潜规则”?

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 职场规则篇 主动询问:遇到不明白的,一定要问.如果你所问的人没有给你满意的回答,你 ...

最新文章

  1. css类选择器优先级 大于 标签选择器
  2. C# ToString
  3. 2021国赛数学建模赛题与分析
  4. 华为手机连电脑当摄像头用_怎么用华为手机当电脑摄像头
  5. 怪物刷新时间计时_《冒险岛2》游戏中查找怪物刷新时间
  6. Pickit 3 Programmer使用说明及 烧写程序步骤
  7. js代码在调试状态执行正确,但是正常使用时没有反应
  8. 管中窥豹IIoT(一):工业物联网价值与解决方案通用模型
  9. pdf.js预览pdf文件流(base64)
  10. Linux版本qq可以远程协助吗,QQ的最实用功能:远程协助
  11. 手机 9006 端口 不断的闪掉
  12. JAVA日记之SpringAOP_XML配置与注解开发 ----喝最烈的酒.
  13. 杰理下载器强制下载工具的使用介绍_AC695N696NAD14AD15全系列支持,看完此文就足够了
  14. [笔记分享] [Camera] MTK Camera基础知识二
  15. sencha touch的pinch zoom控件
  16. 漏洞扫描的应用范围和场景
  17. 算法岗面经总结(映客 )
  18. STM32F429IIT6单片机I2C的使用(代码)--EEPROM使用安森美的AT24C256(借鉴野火教程)
  19. 用友BQ商业智能平台设计模式——信息域智能查询
  20. 判断浏览器系统是IOS还是PC还是android

热门文章

  1. python多元回归预测例子_Python机器学习,多元线性回归分析问题
  2. power系列服务器问题品管主任,了解 Power BI 管理员角色
  3. linux获取read值,read命令读取用户输入
  4. 超干货 | 泰勒图(Taylor diagram)绘制方法大汇总
  5. 你离黑客的距离,就差这20个神器了
  6. 史上最怂黑客?新病毒从上线到“自首”只勒索到五块钱,最后主动提交了密钥...
  7. 如何在windows系统上安装Tensorflow Object Detection API?
  8. 中科院大牛带你玩转Python数据分析,大厂offer轻松拿!
  9. php留言板实战,PHP留言本,非常适合新手实战操作!
  10. javamail课设_JAVA MAIL实例讲解教程视频下载(16课程)