zoukankan      html  css  js  c++  java
  • 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的web开发我们会使用struts2,springMVC和spring这样的框架?(转载)
    Unity3d中设置UISprite图片灰显方法
    游戏后端主程工作内容及游戏项目中的注意事项及游戏项目中注意事项<转载>
    xcode使用
    ios学习笔记2
  • 原文地址:https://www.cnblogs.com/lwh-note/p/8921821.html
Copyright © 2011-2022 走看看