A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 逆风TO 于 2019-5-27 11:16 编辑

公司名称:西安志远德信息技术有限公司
公司地址:西安市 雁塔区 唐沣国际广场A座 A座1401公司面试的人还是挺多的, 先进行笔试和机试,需求就是普通的增删改查和报表的导入导出。
1、文件读写的基本类
答:File Reader 类和FileWriter类分别继承自Reader类和Writer类。FileReader类用于读取文件,File Writer类用于将数据写入文件,这两各类在使用前,都必须要调用其构造方法创建相应的对象,然后调用相应的read()或 write()方法。

2、线程的基本概念、线程的本状态以及状态之间的关系
新建 (Born) : 新建的线程处于新建状态就绪 (Ready) : 在创建线程后,它将处于就绪状态,等待start() 方法被调用运行 (Running) : 线程在开始执行时进入运行状态睡眠(Sleeping) : 线程的执行可通过使用 sleep() 方法来暂时中止。在睡眠后,线程将进入就绪状态
等待 (Waiting) : 如果调用了 wait() 方法,线程将处于等待状态。用于在两个或多个线程并发运行时。挂起 (Suspended) : 在临时停止或中断线程的执行时,线程就处于挂起状态。恢复 (Resume) : 在挂起的线程被恢复执行时,可以说它已被恢复。
阻塞 (Blocked) – 在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态。死亡(Dead) – run() 方法已完成执行或其 stop() 方法被调用之后,线程就处于死亡状态。

3、socket通信(tcp/udp区别)
TCP——传输控制协议,具有极高的可靠性,保证数据包按照顺序准确到达,但其也有着很高的额外负担。UDP——使用者数据元协议,并不能保证数据包会被成功的送达,也不保证数据包到达的顺序,但其传输速度很快。
大多数我们会使用TCP,偶尔才会动用UDP,如声音讯号,即使少量遗失,也无关紧要。
4、简述 Java 中软引用(SoftReferenc)、弱引用(WeakReference)和虚引用
1、概述
   JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再 把它捡回来使用就不可能了。
   但有时候情况并不这么简单,你可能会遇到类似鸡肋一样的物品,食之无味,弃之可惜。这种物品现在已经无用了,保留它会占空间,但是立刻扔掉它也不划算,因 为也许将来还会派用场。对于这样的可有可无的物品,一种折衷的处理办法是:如果家里空间足够,就先把它保留在家里,如果家里空间不够,即使把家里所有的垃 圾清除,还是无法容纳那些必不可少的生活用品,那么再扔掉这些可有可无的物品。
   JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:
强引用、软引用、弱引用和虚引用。
2、强引用
     强引用就是指在程序代码之中普遍存在的,类似“Object obj = new Object()”这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。
3、软引用(SoftReference)
     软引用用来描述一些还有用,但并非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中并进行第二次回收。如果这次回收还是没有足够的内存,才会抛出内存溢出异常。在JDK 1.2之后,提供了SoftReference类来实现软引用。
4、弱引用(WeakReference)   
   弱引用也是用来描述非必需对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK 1.2之后,提供了WeakReference类来实现弱引用。
5、虚引用(PhantomReference)   
    虚引用也称为幽灵引用或者幻影引用,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是希望能在这个对象被收集器回收时收到一个系统通知。在JDK 1.2之后,提供了PhantomReference类来实现虚引用。
5.   什么是webservice?
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据WebService规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。WebService也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
一般的情况下是使用cxf这是框架来实现webservice的功能。 在模块之间互相调用 。在开发当中我们经常使用注解的方式来实现cxf,传递的内容也是通过JSON来作为传输的内容。
6.   Final,finally,finalize的区别?
这三个关键字有些类似,但是作用完全不一致。
一、性质不同
(1)final为关键字;
(2)finalize()为方法;
(3)finally为为区块标志,用于try语句中;
二、作用
(1)final为用于标识常量的关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍);
(2)finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作);
(3)finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;
三、final详解
1定义变量
1.1  final定义基本类型变量时,要求变量初始化必须在声明时或者构造函数中,不能用于其它地方。该关键字定义的常量,除了初始化阶段,不能更改常量的值。
1.2  final定义对象的引用,该引用的初始化与定义常量时的要求一致;该关键字定义的对象内容可以改变,但是引用指向的地址不能改变;
2定义参数
如果传入该参数定义的变量时,与定义变量的修改规则相同;java方法中传递基本类型时是传值的,java方法对于对象的传递是传参的;<归根结底,java中方法的传递是依靠传递“副本”:对于基本类型,首先建立一个Copy,并将传入的值赋值给Copy,然后对Copy进行操作;对于对象类型,首先建立一个引用Copy,并将传入的对象引用赋值给Copy>
比如:method(final int test);
有些书上说,这里final定义参数,尤其是对象的参数很有作用,不能在方法内对于对象的内容进行改变,这样的说法是错误的!原来我也认为这样有些函数式编程的特点,不能对于对象的内容进行修改该,这里依旧可以对对象的内容进行修改。
??定义该参数有什么用??
String天生就是final类型的!
3定义方法
(1)使用final关键字定义的方法,不能被子类继承;
(2)允许编译器将所有对此方法的调用转化为inline(行内)行为,即可以将此方法直接复制在调用处,而不是进行例行的方法调用(保存断点、压栈),这样会使程序的效率升高。但是---------如果过多的话,这样会造成代码膨胀,反而会影响效率,所以该方法要慎用。。
4定义类
一个任何final类无法被任何人继承,这也就意味着此类在一个继承树中是一个叶子类,并且此类被认为是很完美的,不需要进行任何修改(总之是不推荐使用)
7.   Redis的持久化
Redis的应用已经是越来越广了,使用起来的技术难度也不高。持久化本身和运维相关了。但是很多公司没有专门的运维,他们需要的程序猿面面具道,不止是会简单的CRUD就行了。 还要能够解决一些突发性的问题。 甚至在架构设计上线的时候给一定的方案。

Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。
RDB
RDB是Redis默认的持久化方式。按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二进制文件。即Snapshot快照存储,对应产生的数据文件为dump.rdb,通过配置文件中的save参数来定义快照的周期。
# 快照的文件名
dbfilename dump.rdb
# 存放快照的目录
dir /var/lib/redis
# 在进行镜像备份时,是否进行压缩。
# yes:压缩,但是需要一些cpu的消耗。
# no:不压缩,需要更多的磁盘空间。
rdbcompression yes
#900秒后且至少1个key发生变化时创建快照  
save 900 1  
#300秒后且至少10个key发生变化时创建快照  
save 300 10  
#60秒后且至少10000个key发生变化时创建快照  
save 60 10000
一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。例如,每隔5分钟或者更长的时间来创建一次快照,Redis停止工作时(例如意外断电)就可能丢失最近几分钟的数据。
AOF
Redis会将每一个收到的写命令都通过Write函数追加到文件最后,类似于MySQL的binlog。当Redis重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
# 是否开启AOF,默认关闭(no)
appendonly yes
由于Linux会把对文件的写入操作通过buffer缓冲,因此Linux可能不是立即写入到文件,有对视数据的风险。Redis有三种不同的fsync策略供选择:no fsync at all、 fsync every second、 fsync at every query。默认为fsync every second此时的写性能仍然很好,且最坏的情况下可能丢失一秒钟的写操作。
# Redis支持三种不同的刷写模式:
#每次收到写命令就立即强制写入磁盘,是最有保证的完全的持久化,但速度也是最慢的,一般不推荐使用。
# appendfsync always
#每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
appendfsync everysec
#完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不被推荐。
# appendfsync no  
AOF带来了另一个问题,持久化文件会变得越来越大。比如,我们调用INCR test命令100次,文件中就必须保存全部的100条命令,但其实99条都是多余的。因为要恢复数据库的状态其实文件中保存一条SET test 100就够了。为了合并重写AOF的持久化文件,Redis提供了bgrewriteaof命令。收到此命令后,Redis将使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件中,最后替换原来的文件,以此来实现控制AOF文件的合并重写。由于是模拟快照的过程,因此在重写AOF文件时并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件。
# AOF文件名  
appendfilename appendonly.aof
#当进程中BGSAVE或BGREWRITEAOF命令正在执行时不阻止主进程中的fsync()调用(默认为no,当存在延迟问题时需调整为yes)  
no-appendfsync-on-rewrite no  
#当AOF增长率为100%且达到了64mb时开始自动重写AOF  
auto-aof-rewrite-percentage 100  
auto-aof-rewrite-min-size 64mb


121 个回复

倒序浏览

加油,努力,向上
回复 使用道具 举报

厉害厉害
回复 使用道具 举报
谢谢分享~
回复 使用道具 举报
赞赞赞
赞赞赞
赞赞赞
回复 使用道具 举报
      
回复 使用道具 举报
                                         
回复 使用道具 举报
666666666666666666666666
回复 使用道具 举报
666666666666666666666666
回复 使用道具 举报
666666666666666666666666
回复 使用道具 举报
6666666666666666666666
回复 使用道具 举报
学习到很多
回复 使用道具 举报
作者棒棒哒
回复 使用道具 举报
py@py 中级黑马 2019-5-27 14:46:26
14#
感谢分享
回复 使用道具 举报
66666666666666666666666666666666
回复 使用道具 举报
duanshaobo 来自手机 中级黑马 2019-5-27 15:01:12
16#

西安黑马JavaEE就业34期
平均薪资7420元,毕业18个工作日,就业率49.21%
回复 使用道具 举报
感谢分享
回复 使用道具 举报
作用作用作用作用
回复 使用道具 举报
赞赞赞,6666
回复 使用道具 举报

赞赞赞
赞赞赞
赞赞赞
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马