面试5

1.关键字transient
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
MyISAM引擎是MySQL 5.1及之前版本的默认引擎,它的特点是:
  • 不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排它锁
  • 不支持事务
  • 不支持外键
  • 不支持崩溃后的安全恢复
  • 在表有读取查询的同时,支持往表中插入新纪录
  • 支持BLOB和TEXT的前500个字符索引,支持全文索引
  • 支持延迟更新索引,极大提升写入性能
  • 对于不会进行修改的表,支持压缩表,极大减少磁盘空间占用
InnoDB
InnoDB在MySQL 5.5后成为默认索引,它的特点是:
  • 支持行锁,采用MVCC来支持高并发
  • 支持事务
  • 支持外键
  • 支持崩溃后的安全恢复
  • 不支持全文索引
----------------------------------------百度-----------------------------------------------------
一面:
1.怎样设计实现一个高效的线程安全的hashmap 。
方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的。 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现。
方法二:重新改写了HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap. 这个方法比方法一有了很大的改进。(锁分离)
方法一使用的是的synchronized方法,是一种悲观锁.在进入之前需要获得锁,确保独享当前对象,然后做相应的修改/读取.
方法二使用的是乐观锁,只有在需要修改对象时,比较和之前的值是否被人修改了,如果被其他线程修改了,那么就会返回失败.锁的实现,使用的是 NonfairSync. 这个特性要确保修改的原子性,互斥性,无法在JDK这个级别得到解决,JDK在此次需要调用JNI方法,而JNI则调用CAS指令来确保原子性与互斥性.
重写和重载
(1)重写:需要继承;方法吗和参数、返回值必须相同,权限修饰符必须大于等于父类;不可以重写父类的private方法;不可以抛出父类没有抛出的异常;
(2)重载:方法名必须相同;参数个数、类型有一个不相同;返回值可以相同也可以不同;可以有不同的访问修饰符;可以抛出不同异常。
2.用过的设计模式。写单例模式代码,各种情况下比如去掉某一句会怎样。
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。
单例模式:
工厂模式:程序在接口和子类之间加入了一个过渡端,通过此过渡端可以动态取得实现了共同接口的子类实例化对象。
代理模式:指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。
观察者模式:
适配器模式:如果一个类要实现一个具有很多抽象方法的接口,但是本身只需要实现接口中的部分方法便可以达成目的,所以此时就需要一个中间的过渡类,但此过渡类又不希望 直接使用,所以将此类定义为抽象类最为合适,再让以后的子类直接继承该抽象类便可选择性的覆写所需要的方法,而此抽象类便是适配器类。
3、介绍 同步锁,使用情景;
synchronized
4、假如有两个线程,一个线程A,一个线程B都会访问一个加锁方法,可能存在并发情况,但是线程B访问频繁,线程A访问次数很少,问如何优化。(然后面试官说有了解过重度锁和轻度锁吗)

5、进程间都有哪些通信方式;
1.无名管道( pipe ):管道是一种 半双工的通信方式,数据只能单向流动,而且只能在 具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
2.高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。
3.有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许 无亲缘关系进程间的通信。
4.消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5.信号量( semophore ) : 信号量是一个 计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
6.信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
7.共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
8.套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
6、有一个整数,转换为二进制,请找出所有的1的数量;
只计算1的个数使用:
while(n>0)
count++;
n = n & (n-1);
7、你觉得Java是完全面相对象的语言吗?

8、讲解下你对抽象,多态的理解;
抽象就是将实际事物特征抽象出来,用一个类表示,类中的属性就表示事物的不同特征。
抽象类和接口就是抽象的一种表象。
多态
①使用父类类型的引用指向子类的对象;
②该引用只能调用父类中定义的方法,不能调用子类中独有的方法;
③如果子类中重写了父类中的一个方法,那么在调用该方法的时候,将会调用子类中的这个方法;
④在多态中,子类可以调用父类中的所有方法;
⑤多态主要体现为方法重载和方法重写,相同的行为,不同的实现方式;
⑥多态的主要应用是多态参数和多态集合
⑦如果一个方法中有父类作为参数类型,就意味着可以给该方法传递任何一个子类对象。
9、讲解下http请求里的header有什么作用;

10.Get和post区别。
(1)get用于获取数据, 而且应该是安全的和幂等的。post用于提交数据。 (多用于新建)
(2)GET请求的数据会附在URL之后,最多只能是1024字节;POST把提交的数据则放置在是HTTP包的包体中,理论上数据大小没有限制。
(3)POST的安全性要比GET的安全性高。
11.Http协议相关。
HTTP 是基于 TCP/IP 协议的 应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
HTTP/1.0不支持连接保持,所以后来HTTP/1.1增加了Connection:keep-alive以及管道,管道机制则是允许浏览器同时发出A请求和B请求,但是服务器还是按照顺序。
HTTP/2.0是一个彻底的二进制协议;实现双向的、实时的通信(多工),避免了队头阻塞;用ID来区分数据流,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数;可以取消数据流;客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应;引入了头信息压缩机制和信息表;允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送;
12.Java有没有多继承,接口和抽象类区别。jvm 理解
接口可以多继承,类不可以。
(1)抽象类是由abstract关键字修饰,允许包含未实现的方法。
接口是方法声明和 常量值定义的集合,不允许包含变量。
(2)接口是绝对抽象的,不可以被实例化。抽象类不能被实例化。
(3)定义接口时可以使用继承,而且可以使用多继承。抽象类只能单继承。类可以实现很多个接口,但是只能继承一个抽象类;
(4) 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。Java接口中声明的变量默认都是 final的。抽象类可以包含非final的变量。
(5)Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
public是在不同包中也可以访问;protected是必须在同一个包中或者子类才能访问;default是不允许子类访问,可以在类内部或者同一个包中访问;private是只能在类内部访问。
13.JDK和JRE的区别是什么?
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK) 是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程 序。
JDK中包含JRE,JRE中包含JVM。
JDK中包含的JRE主要是为JDK自带的开发工具提供运行环境,与JDK并列的那个JRE是为用户编写的JAVA代码提供运行环境的。
classpath配置的是JDK的lib目录,path配置的是JDK的bin目录。
14.数据库四个范式的区别。在设计数据库的时候如何考量。
第一范式(1NF)属性不可拆分 或 无重复的列 (保证列唯一)
第二范式(2NF)要求实体的属性完全依赖于主关键字。存在一个列被定义为唯一主键的表就是第二范式。(保证行唯一)
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。(外键关系)
第四范式(4NF) 禁止主键列和非主键列一对多关系不受约束用复合列做主键的表。
15.64个马有8个跑道,没有计时工具,最少需要多少次跑,如何找到跑最快的1个和4个马?
先分为8组,找出每组第一再跑一次,一共9次就可以找到第一名;
第九次的第一名的那组的二(1)、三(2),四(3),第二名(4)那组的第二名(5),第三名(6),第三名(7)的第二名(8)再跑一次就可以找到前4名。
16.正则表达式
\s表示所有空白字符;\S表示非空白字符;*表示匹配零次或多次;+表示匹配一次或多次;. 表示除换行符外的任意字符;?匹配零次或一次。
1.如何停止运行一个线程 
interrupt
2.如何实现一个hashmap,需要考虑哪些问题 
hashcode
3.equal和==的区别 
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
String s2 = new String("Monday").intern();会放入缓冲池。
4.如何判断一个对象已经被回收 
5.为什么四次挥手比三次握手多一次 
因为三次握手是要建立和确认客户端和服务器之间的通信线路;而四次挥手是为了关闭两方之间的数据传递,因为是双工的,所以被动方和主动方两个流向都需要关闭和确认,所以是四次。
4. linux相关指令,把能记得的说一下,出了个小功能,用shell实现;
5. sql中replace和update的区别;
update是SQL中的数据更新命令,replace是VF中的数据更新命令;
update不需要打开表,repl命令需要先打开表;
update不加条件是更新表中所有记录,repl不加条件是更新当前记录,要加上all短语才是更新所有记录。
9. 接触过哪些软件测试的方法。
黑盒,白盒测试;
性能测试,压力测试,冒烟测试;
3. 如何拦截5分钟前恶意登录(用户名密码不正确)超多一定次数的ip
6.介绍一下信号量和互斥锁
信号量又称为信号灯,它是用来 协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信 。本质上, 信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况
互斥体禁止多个线程同时进入受保护的代码“临界区”(critical section)。因此,在任意时刻,只有一个线程被允许进入这样的代码保护区。
对于 互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是 自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就 一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。
7.问了问项目,让画一下其中一个项目的系统架构图,和其中一个功能的流程图。
——————————————————————————-——————————
二面:
输入字符流,找第一个重复的字符串。
1、Linux下的一些指令,$$(进程id),$?(上一条命令退出时状态),怎么查看进程,按照内存大小,CPU占用排序等等。
(大写M和大写P)
2、项目中遇到的问题,自己咋解决的等等。
多数据库,使用Mybatis的拦截器。
3、介绍一下hash,怎么解决冲突。(链地址法)
4、进程间的通信,共享内存方式的优缺点。
环境变量/文件描述符:子进程接受父进程环境数据的拷贝以及所有文件描述符。
管道:用于相关和无关进程间的通信,而且形成两个进程间的一个通信通道,通常使用文件读写程序访问。
共享内存:使用客户机/服务器模型(C/S),服务器对客户的数据或动作请求作出反应。
动态数据交换:动态数据交换使用消息传递、共享内存、事务协议、客户/服务器范畴、同步规则以及会话协议来让数据和控制信息在进程间流动。动态数据交换对话( dynamic data exchange session, DDE )的基本模型是客户、服务器。服务器对来自客户的数据或动作作出反应。客户和服务器可以以多种关系来通信。
共享内存 针对消息缓冲的缺点改而利用内存缓冲区直接交换信息,无须复制,快捷、信息量大是其优点。但是 共享内存的通信方式是通过将共享的内存缓冲区直接附加到进程的 虚拟地址空间中来实现的.因此,这些进程之间的读写操作的同步问题操作系统无法实现。必须由各进程利用其他同步工具解决。另外,由于内存实体存在于 计算机系统中.所以只能由处于同一个计算机系统中的诸进程共享, 不方便 网络通信
共享内存块提供了在任意数量的进程之间进行高效双向通信的机制。每个使用者都可以读取写入数据,但是所有程序之间必须达成并遵守一定的协议,以防止诸如在 读取信息之前覆写内存空间等竞争状态的出现。不幸的是,Linux无法严格保证提供对共享内存块的独占访问,甚至是在您通过使用IPC_PRIVATE创 建新的共享内存块的时候也不能保证访问的独占性。 同时,多个使用共享内存块的进程之间必须协调使用同一个键值。
5.讲下堆的作用。
6.堆的垃圾回收对象选择原则。
所谓根集就量正在执行的Java程序可以访问的引用变量的集合(包括局部变量、参数、类变量),程序可以使用引用变量访问对象的属性和调用对象的方法。垃 圾收集首选需要确定从根开始哪些是可达的和哪些是不可达的,从根集可达的对象都是活动对象,它们不能作为垃圾被回收,这也包括从根集间接可达的对象。而根 集通过任意路径不可达的对象符合垃圾收集的条件,应该被回收。下面介绍几个常用的算法。
7 进程间通信详细叙述

8 tcp udp 区别  UDP应用场景
UDP一般用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,但速度必须快),在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。
9 linux中文件名存储在哪里? 改变文件名之后 MD5会不会变
只有两项数据存放在目录项中:文件名和i节点编号。不会的,只有文件内容发生改变MD5才会变化。一般对文件求MD5值只取文件内容部分,像文件名、保存目录、创建时间、修改时间、权限等等的元信息都是不进行计算的。
7 linux命令相关 问用过哪些 然后展开

9 crontab 怎么设置一个每小时、每3小时的定时任务

6. 求一个struct的大小
7.Linux命令相关,问有一个文件A.txt,里面有许多行,找出其中带关键字'B'的行,并统计重复度。我问了下重复度是指啥,他说,这样吧,假设每一行都是由空格分隔开的若干字符,若整个文件中,有2行的最后一个字符都是'10',你就输出  “10” : 2。

8.假如在服务器上执行一个进程时,你发现服务器很卡顿,你会怎么查找原因。

9.time_wait 是TCP四次握手哪个阶段的状态,为什么要有这个状态。这个状态带来的好处和坏处是什么。在网络中,什么与这个状态相似
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值