基本类型和对象的区别是什么(只说了对象大小,没有提到内存中的引用和数据方面)String是基本类型吗,它和StringBuffer以及StringBuilder的区别是什么
1、StringBuffer与StringBuilder 中的方法和功能完全是等价的,
2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全,而StringBuffer则每次都需要判断锁,效率相对更低
实现原理:StringBuffer类继承自AbstractStringBuilder抽象类,实现Serializable序列化接口和CharSequence接口。AbstractStringBuilder抽象类实现Appendabel,CharSequence接口。
vector和ArrayList的区别,跟LinkedList呢(说到了数据结构,线程安全)
数据结构:
Arraylist:底层是基于动态数组,根据下表随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。
Linkedlist基于链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历。
线程安全:两者都是线程不安全的。在多链表的在多线程的时候:链表容易产生的闭环的问题
问线程安全是什么,怎么做到线程安全
是指当多个线程访问同一个变量时,该变量不会因为多线程访问度产生线程安全问题。例如死锁问题,导致共享资源出现错乱,或者是,使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题。
第一种方式:同步代码块
第二种 方式:同步方法
第三种 方式:Lock锁机制, 通过创建Lock对象,采用lock()加锁,unlock()解锁,来保护指定的代码块。
由于synchronized是在JVM层面实现的,因此系统可以监控锁的释放与否;而ReentrantLock是使用代码实现的,系统无法自动释放锁,需要在代码中的finally子句中显式释放锁lock.unlock()。
另外,在并发量比较小的情况下,使用synchronized是个不错的选择;但是在并发量比较高的情况下,其性能下降会很严重,此时ReentrantLock是个不错的方案。
启动线程的方法,线程是什么,怎么开启
系统调用线程类的start()方法来启动一个线程,此时该线程处于就绪状态,而非运行状态,也就意味着这个线程可以被JVM来调度执行。在调度过程中,JVM通过调用线程类的run()方法来完成实际的操作,当run()方法结束后,此线程就会终止。
ThreadLocal实现原理讲一下
它是一种为共享变量在每一个线程中创建一个副本,每一个线程都是可以访问自己的副本的变量。通过绑定线程来实现对线程副本的操作。而不影响其他线程。目的就是为了解决在多线程下访问一个变量的下数据的一致性。
ConcurrentHashMap是怎么实现的
CAS +Node+链表
数据库左连接,右连接,内连接的区别
左外连接:是A表的所有行匹配上B表得出的结果集
右外连接:是B表的所有行匹配上A表得出的结果集
内连接:A和B表的交集
数据库索引是什么?
数据库索引其实就是为了使查询数据效率快。
Get和Post的区别(说到了一般设计的幂等性,问Post一定不是幂等的吗)
1.Get,它用于获取信息,它只是获取、查询数据,也就是说它不会修改服务器上的数据,从这点来讲,它是数据安全的,而稍后会提到的Post它是可以修改数据的,所以这也是两者差别之一了。
2.Post,它是可以向服务器发送修改请求,从而修改服务器的,比方说,我们要在论坛上回贴、在博客上评论,这就要用到Post了,当然它也是可以仅仅获取数据的。
301和302的区别
301是永久重定向,302是临时重定向
大量数据找前100个(说了快速选择和堆排序)
分而治理,将大量的数据的分成多个小的文件,然后在统一的统计一遍就可以。
Linux用过吗,命令随便列举几个
解压 tar –xvf file.tar //解压 tar包 tar -xzvf file.tar.gz //解压tar.gz tar -xjvf file.tar.bz2 //解压 tar.bz2 tar –xZvf file.tar.Z //解压tar.Z unrar e file.rar //解压rar unzip file.zip //解压zip
使用两种命令创建一个文件?
Mkdir filename
如何查看Java应用的线程信息?
Ps–ef |grep java
Linux用一行命令查看文件的最后五行
tail -n 20 filename
查看进程的运行
ps aux | grep tomcat
查看端口是否运行
netstat -anop | grep 8080
查看日志(查看前3000行)
tail -n 1000/ head -n 1000:显示前面1000行
赋予某文件执行权限
chmod 775 文件名 /bin/*(表示下面所有)
赋予某文件执行权限
chmod +x 文件名
看所有网络接口及其状态
ifconfig -a
开放端口即可
iptables -A INPUT -p tcp --dport 80 -j ACCEP
命令作用为移动文件
mv
显示文件的路径
pwd -P
tar命令,用于压缩解压:
tar –xvf file.tar //解压 tar包、tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2、tar –xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar、unzip file.zip //解压zip
rmdir 命令删除目录:
Sudo rmdir –p filename
gzip 命令压缩文件或文件夹为 .gz文件
kill 命令用于终止进程,参数:
free 命令用于显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer:
按ESC键 跳到命令模式,然后输入:
:w - 保存文件,不退出 vim
:w file -将修改另外保存到 file 中,不退出 vim
:w! -强制保存,不退出 vim
:wq -保存文件,退出 vim
:wq! -强制保存文件,退出 vim
:q -不保存文件,退出 vim
:q! -不保存文件,强制退出 vim
:e! -放弃所有修改,从上次保存文件开始再编辑
Redis是干嘛用的,项目中用来干嘛
Redis的一般用于两个做作用是:缓存系统,和分布式锁。
redis缓存系统的原理和分布式锁的原理实现具体是怎么样的?
反问:
我想问实现主要参与的业务是什么?
部门业务中的大致的流程是什么?
在业务的过程中主要使用到的那些技术栈?
我需要在那些技术加强?