java面试题,附个人理解答案
一,面向对象的特征:
1.抽象 包括数据抽象跟行为抽象,将对象共同的特征取出形成一个类
2.继承 被继承类为基类/超类,继承类为子类/派生类
3.封装 多次使用道德数据或方法,封装成类,方便多次重复调用
4.多态
编译时的多态:方法重载(overload)实现编译时多态
运行时的多态:方法重写(override)实现运行时多态,又称为后绑定
二,访问修饰符区别:
public:对所有类公开
private:对当前类可用,其他不可用
protected:同包下可用
默认default:对于同一个包其他类公开,子类,其他包不可用
三,String类型:
String不是基础数据类型,跟枚举都属于引用类型
8大基础数据类型包括:byte、short、int、long、float、double、char、boolean
四,float f=3.4;是否正确?
不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。
五,int和Integer有什么区别?
public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = 3; // 将3自动装箱成Integer类型
int c = 3;
System.out.println(a == b); // false 两个引用没有引用同一对象
System.out.println(a == c); // true a自动拆箱成int类型再和c比较
}
public static void main(String[] args) {
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; //因为同为包装类所有无关于值,而是比较引用
System.out.println(f1 == f2); //true 字面值在-128~127中,说明引用同个对象
System.out.println(f3 == f4); //false 字面值不在-128~127之间,包装类会自动生成新包装对象,所有引用不是同个对象
}
六,& ,&&区别
相同点:结果一样,两边都要满足条件时才返回true
不同点:&&有短路,就是一旦第一个表达式为false就直接返回false,后面的直接被断掉,而&会执行完才返回
七, 存在使i + 1 < i的数吗
存在,若i为int类型,i+1超过最大整数,反为负数(最大整数32位)
八, 1900-1-1到2016-11-11有多少天
public static void main(String[] args){
int sum=0;
for(int year=1900;year<=2015;year++){ //因为2016没满一年,先算年
if(year%4==0 && year%100!=0 || year%400==0){
sum=sum+366;
}else{
sum=sum+365;
}
}
for(int month=1;month<=10;month++){ //因为11月没满,先算满10月
if(month==2){
if(2016%10==0 && 2016%100!=0 ||2016%400==0){
sum=sum+29;
}else{
sum=sum+28;
}
}else{
if(month==4 || month==6 ||month==9 ||month==11){
sum=sum+30;
}else{
sum=sum+31;
}
}
}
sum=sum+11;
System.out.print("1900年1月1日到2016年11月11日一共"+sum+"天");
}
九,tomcat中文件夹都有什么用?
bin :命令 开启和关闭服务器
conf:配置文件
server.xml 端口
tomcat-user.xml 远程用户名,密码
lib :jar包
logs:日志
webapps:工程发布位置
十,GET , POST请求方式的区别?
1.get参数通过url传递,post放在request body中。
2.get请求在url中传递的参数是有长度限制的,而post没有。
3.get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
4.get请求只能进行url编码,而post支持多种编码方式
5.get请求会浏览器主动cache,而post支持多种编码方式。
6.get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
十一,关于文件上传的注意事项:
事项一:上传文件在服务器端保存位置问题
(1)保存在可以被浏览器直接访问的位置
例如:商城中的商品图片
保存在工程的WebRoot下的路径(但不包含META-INF以及WEB_INF目录及其子目录)
(2)保存在不能被浏览器直接访问的位置
例如:付费的视频
保存在工程中 META-INF WEB_INF目录及其子目录下
或者保存到不在工程中的服务器的磁盘目录下
事项二:上传文件在同一目录重名问题
可以在开发中为上传文件起一个随机名称
使用当前的毫秒值
或使用UUID工具类生成随机字符串
事项三:同一目录下文件过多
需要进行目录分离,因为同一文件夹下的文件过多会影响查询速率
目录分离的几种方案:
(1)按照上传时间进行目录分离(月、周)
(2)按照上传用户进行目录分离(为每个用户建立单独的目录)
(3)按照文件固定数量进行分离(假设每个目录只能存放3000个文件,每当一个目录存满3000个文件后,创建一个 新的目录)
(4)按照文件名的hashcode进行目录分离
public static String generateRandomDir(String uuidFileName) {
// 获得唯一文件名的hashcode
int hashcode = uuidFileName.hashCode();
// 获得一级目录
int d1 = hashcode & 0xf;
// 获得二级目录
int d2 = (hashcode >>> 4) & 0xf;
return "/" + d2 + "/" + d1;// 共有256目录l
}
几种目录分离的方法优缺点:
按照时间分离的话 不稳定 比如淘宝双十一访问量最多 按照时间会造成某一时期文件数量过多。
按照用户目录进行分离也不是太好,因为有的用户上传文件数量多 有的少。
按照文件固定数量进行分离固然好,但是需要判断文件夹内文件的数量 相当繁琐。
最好按照文件名的hashcode进行分离
java面试题,附个人理解答案的更多相关文章
- 精选30道Java笔试题附答案分析
精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑 ...
- 2021精选 Java面试题附答案(一)
1.什么是Java Java是一门面向对象的高级编程语言,不仅吸收了C++语言的各种优点,比如继承了C++语言面向对象的技术核心.还摒弃了C++里难以理解的多继承.指针等概念,,同时也增加了垃圾回收机 ...
- 2020最常见的200+Java面试题汇总(含答案解析)
前言 2020年快要结束了,很多朋友问题,有没有整理今年的一些面试题,最近抽时间整理了一份Java面试题.或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信足以应对目前市面上绝大部分的 ...
- JAVA初级面试题,附个人理解答案
一,面向对象的特征:1.抽象 包括数据抽象跟行为抽象,将对象共同的特征取出形成一个类2.继承 被继承类为基类/超类,继承类为子类/派生类3.封装 多次使用道德数据或方法,封装成类,方便多次重复调用4. ...
- 2019最新整理JAVA面试题附答案
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- 史上最全Java面试题(带全部答案)
今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次.对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦.在跳槽季来临之前,特地做这 ...
- Java面试题收集以及参考答案(100道)
不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题. 1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Cl ...
- Java 面试题 百度/参考的答案
"a=b"和"a.equals(b)"有什么区别? 如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象 ...
- Java 面试题 自己写的答案
基本概念 操作系统中 heap 和 stack 的区别 栈(stack)与堆(heap)都是Java用来在内存中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 在函 ...
随机推荐
- Java-IO之管道(PipedInputStream和PipedOutputStream)
java中PipedInputStream和PipedOutputStream分别是管道输入流和管道输出流,它的作用是让多线程可以通过管道进行线程间的通讯,在使用管道通信时,必须将PipedInput ...
- iOS数据解析UI_14
数据解析:就是按照约定(假象)好的格式提取数据的过程就叫解析: 提供数据方(后台):工作就是把数据按照一定的格式存储起来 提取数据方(前台):工作就是把数据按照一定的格式读取出来 主流的格式:X ...
- Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)
上一篇文章<Linux Debugging:使用反汇编理解C++程序函数调用栈>没想到能得到那么多人的喜爱,因为那篇文章是以32位的C++普通函数(非类成员函数)为例子写的,因此只是一个特 ...
- C++格式化输出,C++输出格式控制
在输出数据时,为简便起见,往往不指定输出的格式,由系统根据数据的类型采取默认的格式,但有时希望数据按指定的格式输出,如要求以十六进制或八进制形式 输出一个 整数,对输出的小数只保留两位小数等.有两种方 ...
- 【翻译】Sencha Ext JS 5发布
原文:Announcing Sencha Ext JS 5 简介 我代表Sencha和整个Ext JS团队,很自豪的宣布,在今天,Sencha Ext JS 5发布了.Ext JS 5已经迈出了一大步 ...
- (二十五)键盘的设置与TextField细节处理
设置Return Key类型为Send并且勾选下面的复选框即可实现没有内容时禁用keyboard,有内容自动启用. 文本框左边框与文本留有间距的方法: //文本框左侧留下间距 UIView *left ...
- AngularJS进阶(二十六)实现分页操作
JS实现分页操作 前言 项目开发过程中,进行查询操作时有可能会检索出大量的满足条件的查询结果.在一页中显示全部查询结果会降低用户的体验感,故需要实现分页显示效果.受前面"JS实现时间选择插件 ...
- CSS中让一个div的高度随着另外个一个统计的div的高度变化而变化的代码
.w1002 .left_part{overflow:hidden; padding-bottom:9999px; margin-bottom:-9999px;display:inline;}
- Unable To Import Or Enter Sale Order - ORA-20001: APP-FND-01564: ORACLE error - 1422 in get_seq_info
In this Document Symptoms Cause Solution APPLIES TO: Oracle Order Management - Version 12.0.4 ...
- MulticastSocket 使用
/** * ServerMulticastSocketTest.java * 版权所有(C) 2014 * 创建者:cuiran 2014-1-9 下午3:22:01 */ package com.u ...