笔记

1.面向对象特征?

封装、继承、多态

2.Math.round(-1.5)?

-1(先加0.5再向下取整)

3.如何将字符串反转?

把字符串转化为字符数组,循环遍历;或者StringBuffer中的reverse方法 原理一样

4.string和stringbuffer的区别?

string是不可修改的对象,如果修改都是重新创建一个新的对象,然后把新的值保存,String是final类,即不能被继承。
stringbuffer是一个可变对象,当对它进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立,StringBuffer subffer=new StringBuffer();
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null,通过它的append方法向其赋值 subffer.append(“hello word”);
stringbuffer和StringBuilder基本差不多,但stringbuffer是线程安全的。

5.Files的常用方法?

创建方法:boolean createNewFile:在指定路径创建文件,如果文件已经存在,则不创建,返回false
boolean mkdir():创建一级文件夹
boolean mkdirs():创建多级文件夹
删除方法:boolean delete():删除失败返回假。如果文件正在使用,则删除不了返回false
void deleteOnExit():程序退出时删除文件
判断方法:boolean exists():判断文件是否存在
获取信息:
getName();
getPahth();//获取路径
getAbsoluteFile();//获取绝对路径封装成文件对象
getAbsolutPath();//获取绝对路径
getParent();
lastModified();
length();

6.如何实现数组和List之间的转换?

List转数组:toArray(arraylist.size()方法
数组转List:Arrays的asList(a)方法

7.哪些集合类线程是安全的?

Vector:就比Arraylist多了个同步化机制(线程安全)。
Hashtable:就比Hashmap多了个线程安全。
ConcurrentHashMap:是一种高效但是线程安全的集合。

8.并行和并发有哪些区别?

并发是指一个处理器同时处理多个任务。并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。
  来个比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。

9.线程的生命周期,实现方式,线程池?

新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件
运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态,run()方法定义了线程的操作和功能
阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入阻塞状态
死亡:线程完成了它的全部工作或线程被提前强制性地中止
实现方式:继承Thread类,实现Runnable接口
start()和run()的区别:
1.run(); 只是调用了一个普通方法,并没有启动另一个线程,程序还是会按照顺序执行相应的代码。
2.start(); 则表示,重新开启一个线程,不必等待其他线程运行完,只要得到cup就可以运行该线程

10.sleep和wait的区别?

sleep方法没有释放锁,而wait方法释放了锁。sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源
使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用

11.什么是java序列化,什么时候需要序列化?

序列化:将 Java 对象转换成字节流的过程。
反序列化:将字节流转换成 Java 对象的过程。
当 Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理。
序列化的实现:类实现 Serializable 接口,这个接口没有需要实现的方法。实现 Serializable 接口是为了告诉 jvm 这个类的对象可以被序列化。

12.如何实现对象克隆?

13.try-catch-finally中如何catch中return了还会执行finally吗?

会执行,在return 前执行

14.forward和redirect的区别?

forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。
forword 一般用于用户登录的时候,根据角色转发到相应的模块
redirect一般用于用户注销登录时返回主页面或者跳转到其他网站

15.tcp和udp的区别?

tcp有连接,udp无连接
TCP保证数据正确性,UDP可能丢包
TCP保证数据顺序,UDP不保证
对系统资源的要求(TCP较多,UDP少)

16.如何解决跨域?

1.过滤器:设置响应头
2.注解:@CrossOrigin(origins = “http://localhost:4000”)

17.单例模式

饿汉式:
public class Singleton {

private final static Singleton INSTANCE = new Singleton();

private Singleton(){}

public static Singleton getInstance(){
    return INSTANCE;
}

}
懒汉式
public class Singleton {

private static Singleton instance = null;

private Singleton() {
}

public static Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
}

}

18.spring常用的注入方式?

@Autowired:自动装配
@Resource注解可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定

19.spring事务实现方式?

(1)编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。
(2)基于 TransactionProxyFactoryBean的声明式事务管理
(3)基于 @Transactional 的声明式事务管理
(4)基于Aspectj AOP配置事务

20.spring boot配置文件有哪几种类型,有什么区别?

.properties 和 .yml
.yml采取的是缩进的格式 不支持@PeopertySource注解导入配置

21.mybatis有哪几种分页方式?

1.数组分页(根据page和pagesize截取数组)
2.sql分页
3.拦截器分页(创建拦截器,拦截mybatis接口方法id以ByPage结束的语句)
4.RowBounds分页适合数据量小的分页

22.hasmap的存储原理?

1.put方法会根据这个key计算hash码来得到数组的位置
2.数组下标的值是否为null,为null 自然是直接插入我们的value值,当key!=null我们就可以覆盖value值
3.判断数组后面跟着的这个链是否为树(TreeNode),是树呢,我们传入的值就会按照key,value的格式存入了,不是树就是链表,那么put方法就会遍历这个链表
4.在遍历的时候呢我们会判断这个链表的长度是否大于8,大于呢就会将这个链表转换为树,再按照key,value的格式存入。小于则会判断链表中的key!=null,若kay!=null则覆盖,key==null我们的value就会插入
5.最后一步为判断扩容,当数组容量超过最大容量时就会扩容一倍(即二进制的进位)

24.new HasMap(10000)put10000条数据会扩容吗

会。
例如想要用 HashMap 存放 1k 条数据,应该设置 1000 / 0.75,实际传递进去的值是 1333,然后会被 tableSizeFor() 方法调整到 2048,足够存储数据而不会触发扩容。

25.ArrayList和LinkedList的区别

1.ArrayList的实现是基于数组来实现的,LinkedList的基于双向链表来实现
2.LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

26.final、finally和finallus

-------------------------------------分割线------------------------------------------------------

1.简述spring中ioc/di和aop,spring优点

ioc:通常,我们实例化一个对象时,都是使用类的构造方法来new一个对象,这个过程是由我们自己来控制的,而控制反转就把new对象的工交给了Spring容器。
面向切面编程(AOP)就是纵向的编程。比如业务A和业务B现在需要一个相同的操作,传统方法我们可能需要在A、B中都加入相关操作代码,而应用AOP就可以只写一遍代码,A、B共用这段代码。并且,当A、B需要增加新的操作时,可以在不改动原代码的情况下,灵活添加新的业务逻辑实现。
AOP主要一般应用于签名验签、参数校验、日志记录、事务控制、权限控制、性能统计、异常处理等。

2.简述springmvc原理

简单理解:客户端发送请求----前端控制器接受客户端请求DispatcherServlet----找到处理器映射HandlerMapping----找到处理器Handler----处理器返回一个模型视图ModelAndView----视图解析器进行解析----返回一个视图对象----前端控制器的得到视图对象----显示给用户

3.简述mybatis运行原理

第一步通过SqlSessionFactoryBuilder创建SqlSessionFactory
第二步通过SqlSessionFactory创建SqlSession
第三步通过SqlSession拿到Mapper对象的代理
第四步通过MapperProxy调用Maper中相应的方法

4.简述spring boot优点

(1) 快速构建项目;
(2) 对主流开发框架的无配置集成;
(3) 项目可独立运行,无须外部依赖Servlet容器;
(4) 提供运行时的应用监控;
(5) 极大的提高了开发,部署效率;
(6) 与云计算的天然集成。

6.spring事务的优点,特性,隔离级别,传播机制

特性:原子性、一致性、隔离性、持久性
隔离级别:读未提交、读已提交、可重复读、串行化
传播机制:
REQUIRES_NEW :新建事务,如果当前存在事务,把当前事务挂起。
SUPPORTS :支持当前事务,如果当前没有事务,就以非事务方式执行。
NOT_SUPPORTED :以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER :以非事务方式执行,如果当前存在事务,则抛出异常。

7.redis存储类型,雪崩,穿透

string、list、set、zset
穿透:
一般的缓存系统,都是按照key值去缓存查询,如果不存在对应的value,就应该去DB中查找 。这个时候,如果请求的并发量很大,就会对后端的DB系统造成很大的压力。这就叫做缓存穿透。关键词:缓存value为空;并发量很大去访问DB。
解决方法
1.设置布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,
从避免了对底层存储系统的查询压力。
2. 如果一个查询返回的数据为空,不管是数据不存在还是系统故障,我们仍然把这个结果进行缓存,但是它的过期时间会很短
最长不超过5分钟。
雪崩:
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,大量数据会去直接访问DB,此时给DB很大的压力。
解决方法:
不同的key,可以设置不同的过期时间,让缓存失效的时间点不一致,尽量达到平均分布。

8.数据库乐观锁悲观锁以及应用场景

乐观锁:
顾名思义,对当前操作的数据保持一个乐观的态度,认为不会有其他事务操作修改当前的数据记录。只有在提交事务更新时,会检测有没有被修改。若有则直接选择retry或定义的操作。适合读取操作多。例子:hiberante的version版本控制

悲观锁:
悲观锁认为其他事务会对操作的数据进行修改,所以当查询时将数据上锁。若其他事务需要操作该数据则需要等待。适合写入操作多。例子:数据库中的行锁,表锁。

9.数据库脏读,幻读,不可重复读

脏读:
为事务1第二次读取时,读到了事务2未提交的数据。若事务2回滚,则事务1第二次读取时,读到了脏数据。
不可重复读:
不可重复读与脏读逻辑类似。主要在于事务2在事务1第二次读取时,提交了数据。导致事务1前后两次读取的数据不一致。
幻读:
事务1第二次查询时,读到了事务2提交的数据。不可重复读针对的是值的不同,幻读指的是数据条数的不同

10.nginx集群部署

11.linux常用命令

12.vue特性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值