问答及踩坑

1.简述 String 和 StringBuffer 的区别。

String: 字符串常量,属性有fianl修饰,一经创建就不可变。
StringBuffer: 字符串变量,方法有synchronized修饰。
StringBuilder: 字符串变量,方法没有synchronized修饰。
总结线程安全上来说 StringStringBuffer 是线程安全的,StringBuilder线程不安全的。
另外运行速度、执行速度 StringBuilder> StringBuffer > String(因为String对象创建是不可变的)
String:适用于少量的字符串操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

2.说出 Servlet 的生命周期,并说出 Servlet 与 GCI 的区别。

Servlet 周期顺序:容器加载和实例化 > 初始化 > 处理请求 > 服务结束销毁
加载和实例化 容器负责加载和实例化一个servlet。实例化和加载可以发生在引擎启动的时候,也可以推迟到容器需要该servlet为客户请求服务的时候。
初始化 servlet加载并实例化后,容器必须在它能够处理客户端请求前初始化它。通过调用它的init方法并给它传递唯一的一个(每个servlet定义一个)ServletConfig对象完成这个过程。给它传递的这个配置对象允许servlet访问容器的配置信息中的名称-值对(name-value)初始化参数。这个配置对象同时给servlet提供了访问实现了ServletContext接口的具体对象的方法,描述了servlet的运行环境。
处理请求 请求对应的doGet() doPost()方法,每一个请求由ServletReques代表,ServletResponse 回应请求
服务结束 将调用destroy()方法,销毁实例
Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁
而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

3.请简述 Collection 和 Collections 的区别。

Collenction集合接口,提供了对集合对象进行基本的接口通用方法,Collection在Java中有很多具体实现,collection的意义就是为了给集合类提供最大化的统一操作方法
Collections 是一个包装类提供了各种有关集合操作的静态方法,该类不能被实例化,可以理解为工具。

4.& 和 && 的区别。

都是表示逻辑运算符,都表示逻辑运输符and当两边的表达式都为true的时候,整个运算结果才为true,否则为false&&的短路功能,当第一个表达式的值为false的时候,则不再计算第二个表达式&两个表达式都执行

5.sleep() 和 wait() 有什么区别?

从使用角度看
sleep()Thread线程类的方法,而wait()Object顶级类的方法。
sleep()可以在任何地方使用,wait() 只能在同步方法或者同步块中使用。
cpu及资源释放
sleep(),wait()调用后都会暂停当前线程并让出cpu的执行时间
但不同的是sleep()不会释放当前持有的对象的锁资源,到时间后会继续执行。而wait()会放弃所有锁并需要notify/notifyAll后重新获取到对象锁资源后才能继续执行
异常捕获
sleep()需要捕获或者抛出异常,而wait()/notify()/notifyAll()不需要

6.GC 是什么?为什么要有 GC?

GC 垃圾收集,Java是从C++衍生来的,在C/C++中创建对象使用结束后,需要自己手动释放内存,在Java中是不需要的,因为垃圾回收器会自动管理,如果需要请求垃圾回收可以调用System.gc()Runtime.getRuntime().gc()
因为显式声明是做堆内存全扫描,也就是 Full GC,是需要停止所有的活动的(Stop The World Collection),而其显示调用System.gc() 只是给虚拟机一个建议不一定会执行,因为System.gc()在一个优先级很低的线程中执行。

7. short s1 = 1;s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

s1 = s1 + 1 编译不能通过s1 += 1正常运行,因为 s1+1 运算时会自动提升表达式的类型,所以结果是int型+= 是Java语言规定的运算符,Java编译器 会对它进行特殊处理

8.Math.round(11.5) 等于多少? Math.round(-11.5) 等于多少?

Math.round(11.5) = 12, Math.round(-11.5) = -11

Math.round() 四舍五入,float时返回int值,double时返回long

Math.abs()计算绝对值

Math.sqrt()计算平方根

Math.cbrt() 计算立方根

Math.random ()取得一个大于或者等于0.0小于不等于1.0的随机数

9.设计4个线程,其中两个线程每次对j加1,另外两个线程每次减1,写出程序。
public class Data {
    private int j = 0;
    public synchronized void syncAdd() {
        j++;
        System.out.println("j 的值为:" + j);
    }
    public synchronized void syncSub() {
        j--;
        System.out.println("j 的值为:" + j);
    }

    static class AddThread extends Thread {
        private Data data;
        public AddThread(Data data) {
            this.data = data;
        }

        @Override
        public void run() {
            data.syncAdd();
        }
    }

    static class SubThread extends Thread {
        private Data data;
        public SubThread(Data data) {
            this.data = data;
        }

        @Override
        public void run() {
            data.syncSub();
        }
    }

    public static void main(String[] args) {
        Data data = new Data();
        Thread add1 = new AddThread(data);
        Thread add2 = new AddThread(data);
        Thread sub1 = new SubThread(data);
        Thread sub2 = new SubThread(data);

        add1.run();
        add2.run();
        sub1.run();
        sub2.run();
    }
}
10.String s = new String("xyz"),创建了几个String Object?

两个。一个是编译时决定的,最后放在常量池中。一个是运行时放在堆里面的。s 只是一个引用,本身不是对象。
String s= "xyz"这样的,s 这个引用就会直接指向常量池的"xyz"

第一个对象是字符串常量"xyz", 第二个对象是new String("xyz")的时候产生的,在堆中分配内存给这个对象,只不过这个对象的内容是指向字符串常量"xyz" 另外还有一个引用s,指向第二个对象。这是一个变量,在栈中分配内存

11.java有没有goto?

goto是java语言中的保留字目前还没有在java中使用goto这个词是C语言中的,goto语句通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出循环体等功能。而在结构化程序语言中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。但是在java语言中,goto这个词只是作为了保留字,还没有使用。那是因为java语言讲究简单,方便

12.EJB 包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?

EJB是sun的JavaEE服务器端组件模型设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise Java Beans)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务中心中心支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。在EJB3.0推出以后,实体Bean被单独分了出来,形成了新的规范JPA
SessionBean是无状态的,生命周期由容器决定,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful(有状态) Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例
EntityBean Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理

13.接口是否可以继承(extends)接口,抽象类是否可以实现(implements)接口?抽象类是否可以继承实体类(concrete class)?

接口可以继承(extends)接口
抽象类可以实现(implements)接口
抽象类可以继承实体类,但前提是实体类必须有明确的构造函数

14.怎么理解Java面向对象?

可以从四个方面封装,继承,抽象,多态逐一说明:

封装:指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
优点 良好的封装能够减少耦合。类内部的结构可以自由修改。可以对成员变量进行更精确的控制。隐藏信息,实现细节

抽象:用关键字abstract修饰,面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

继承:使用extends,一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

多态:同一个行为具有多个不同表现形式或形态的能力
优点消除类型之间的耦合关系 ,可替换性,可扩充性, 接口性, 灵活性,简化性
实现方式 重写,接口,抽象类和抽象方法
存在的必要条件继承,重写,父类引用指向子类对象

15、MYSQL 三范式,五约束
  • 第一范式(1NF):表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性
  • 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系
  • 第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键)

五约束

  • primary key 设置主键约束;
  • UNIQUE 设置唯一性约束,不能有重复值;
  • DEFAULT 默认值约束;
  • NOT NULL 设置非空约束,该字段不能为空;
  • FOREIGN key 设置外键约束。
16、List,Map ,Set 的区别

从形式来说map 是key-value的形式,list和set是单个元素存储。
List和Set的区别:

List:有序可重复
ArrayList(查找快)和LinkedList(删除添加快) 是按存放顺序排列不是自然顺序

Set:“无序”,不重复
HashSet:是没有存放顺序
LinkedHashSet:是按照存放顺序排列的
TreeSet:是按照自然顺序排列的

17、怎么理解AOP,IOC,DI?

AOP面向切面,是将程序功能 中的频繁出现或者与主业务逻辑代码相关度不高的代码抽离出来,通过切面编程的方式在想要调用的时候引入调用的思想。AOP(面向切面)和OOP(面向对象)一样都是一种编程思想,这种思想的实现机制在Spring中便是应用了java的动态代理和java的反射。在实际编程中,我们通常会遇到一些交叉业务逻辑(比如:日志,事务,安全等等),实际开发中可以使用切面做很多业务方面的逻辑处理,例如: 谋充值活动 充100,反 50,使用切面编程 可以将充值和返利解耦,返利活动利用切面

IOC(Inversion of Control)控制反转,通俗的说就是我们不用自己创建实例对象,这些都交给Spring的bean工厂帮我们创建管理。这也是Spring的核心思想,通过面向接口编程的方式来是实现对业务组件的动态依赖。这就意味着IOC是Spring针对解决程序耦合而存在的。

DI(Dependency Injection)依耐注入,将相互依赖的对象分离,在Spring的配置(注解)中描述它们之间的依赖关系,这些依赖关系也只在使用时才被建立。

IOC与DI-开涛 | IOC与DI-私塾

MySQL几种索引类型

四种索引类型,五种使用方法(全文索引,唯一索引,主键索引,普通索引)组合索引。

  • 主键索引:创建主键时自动创建,不允许为空,一般设为int,且自增。
  • 唯一索引:要求字段值唯一,可以为空。
    建表时:UNIQUE INDEX IndexName(字段名(length))
    建表后:CREATE UNIQUE INDEX IndexName ON TableName(字段名(length))
    或ALTER TABLE TableName ADD UNIQUE INDEX IndexName(字段名(length))
  • 全文索引:假设字段的数据类型是长文本,文本字段上(text等)建立了普通索引,我们需要查找关键字的话,那么其条件只能是where column like '%xxxx%' ,但是,这样做就会让索引失效,这时就需要全文索引了。
  • 普通索引:创建一个普通索引时,不需要加任何UNIQUE、FULLTEXT或者SPATIAL参数 ,语句 ALTER TABLE {table_name} ADD INDEX index_name ( {column} )
    索引资料

是用索引原则

  • 装载数据后再建立索引。
  • 频繁搜索的字段可以作为索引。
  • 在联接属性上建立索引(主外键)。
  • 经常排序分组的字段。
  • 删除使用频率较低的索引
  • 指定索引块的参数,如果将来会在表上执行大量的insert操作,建立索引时设定较大的ptcfree

如何避免索引失效-口诀

  • 全职匹配我最爱,最左前缀要遵守;
  • 带头大哥不能死,中间兄弟不能断
  • 索引列上少计算,范围之后全失效
  • like百分写最右,覆盖索引不写星
  • 不等空值还有or,索引失效要少用
  • var引号不可丢,SQL高级也不难
    参考文献
Java8新特性

参考文献 腾讯云社区

HTTP与 HTTPS的区别
  • HTTP需要到CA申请证书,需要花费一定的金钱,因此在成本上比HTTP要高
  • HTTP是超文本传输,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
  • HTTP和HTTPS使用完全不同的连接方式,使用的端口也不一样,http是80,Https是443。
  • HTTP连接简单,是无状态的,HTTPS协议是SSL+HTTP协议构建的,可进行加密传输,身份认证的网络协议,比http协议安全
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标...
    michaelgong阅读 805评论 0 1
  • JAVA面试题 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 ...
    JA尐白阅读 1,140评论 1 0
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,563评论 1 114
  • 一. Java基础部分.................................................
    wy_sure阅读 3,780评论 0 11
  • 我不喜欢在大街上吃饭,人间烟火不代表必须有烟还要有火。但我仍然跟着彭杨跑到地摊上撸串。 他给我要了一罐可乐,他自己...
    mengmengjia阅读 386评论 0 3