博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
今天进行了cvte的一面,感觉特糟糕,对自己五星差评,以下为总结
阅读量:4148 次
发布时间:2019-05-25

本文共 5961 字,大约阅读时间需要 19 分钟。

cvte一面即终面  3-11
考官给的第一个问题是:给定两个表,一个student(id,name),一个cource(id,stuid,subid(课程id),cource(单门课程的分数)),
让查询出总分数大于300的前三名学生的id,姓名以及总分 ?
答:这个当时没写出来,事后仍然没写出来,真的水平这么水吗?还是他问题出的有毛病?还是我听错了,看官知道解法的请艾特我,
不胜感激!
受指教后的答案:SELECT s.id,s.name,SUM(c.subcource) FROM student s,cource c WHERE s.id=c.stuid GROUP BY c.stuid HAVING 
SUM(c.subcource)>300 ORDER BY SUM(c.subcource) DESC LIMIT 0,3
还问了  如何往student中插一个int型的age字段并且默认为0,我回答了:alter table student add age int default 0;
数据库加索引的好处?
建立索引的好处
创建索引可以大大提高数据库系统的查询性能。
a) 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
b) 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
c) 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
d) 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
e) 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。?
建立索引需要付出的代价
建立索引的目的是加快对表中记录的查找或排序。但是为表设置索引是要付出代价的:这个代价有几个个方面
a) 索引需要占物理空间
除了数据表占数据空间之 外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
b) 创建索引和维护索引要耗费时间
这种时间随着数据量的增加而增加。
c) 降低维护速度
当对表中的数据进行增加、删除和修改的时候,索引也要动态的维 护,这样就降低了数据的维护速度,同样降低了效率。
还问了mysql 的存储引擎:问你的mysql用的是什么引擎,我答用的是默认的那个InnoDB,还问的InnoDB的特点?我没回答上来都囊了几句
自己都不知道说的啥,总结InnoDB,ISAM和MyISAM的特点?
答:纠正,mysql默认使用的是MySIAM引擎,自抽一巴掌,下边是InnoDB和MyISAM的特点:
InnoDB引擎特点: (一下特性均提高了多用户并发操作的性能表现)
一:提供了具有事务提交,回滚和崩溃能力修复能力的事务安全型表;
二:提供了行锁,提供与Oracle类型一致的不加锁读取;
三:表中不需要扩大锁定,因为InnoDB的列锁定适宜非常小的空间;
四:提供外检约束;
五:设计目标是处理大量数据库系统,它的CPU利用率是其他基于磁盘的关系型数据库引擎所不能比的;
六:在主内存中建立其专用的缓冲池用于高速缓冲数据和索引;
七:把数据和索引放在表空间中,可能包含多个文件,这与其他的不一样,MyISAM是把表存放在单独的文件中;
八:表的大小只受限与操作系统的文件大小,一般为2GB;
MyISAM引擎特点:(读取操作在效率上优于InnoDB,小型应用使用MyISAM是不错的选择,并发性弱于InnoDB)
一:MyISAM是mysql默认的存储引擎
二:具有检查和修复表格的大多数工具
三:表格可以被压缩
四:支持全文搜索
五:不是事务安全的,如果事务回滚将造成不完全回滚,不具有原子性
六:不支持外检
七:如果执行大量的select,MyISAM是最佳的选择
八:每张MyISAM表被存放在三个文件:frm文件存放表格定义,数据文件是MYD(MYData),索引文件是MYI(MYIndex)引伸
九:表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少麻烦;
接下来问:你在学习过程中常用那些集合类?我回答了list,set,map,又问hashMap是怎么实现,我回答数组+链表,了解过ConcurrentHashMap
吗?hashMap是线程安全的吗?ConcurrentHashMap是如何实现线程安全的?如何解决哈希冲突?
答:ConcurrentHashMap引入了“分段锁”的概念,可以理解为把一个大的Map拆分为N个小的HashTable,根据key.hashCode()来决定吧key放到
哪个HashTable中。ConcurrentHashMap的并发度就是setment的大小,默认为16,可最多同时有16条线程操作ConcurrentHashMap,
ConcurrentHashMap在jdk1.6和jdk1.8实现原理不同:
jdk1.6:
ConcurrentHashMap是线程安全的,但是与Hashtable相比,实现线程安全的方式不同。Hashtable是通过对hash表结构进行锁定,
是阻塞式的,当一个线程占有这个锁时,其他线程必须阻塞等待其释放锁。ConcurrentHashMap是采用分离锁的方式,它并没有对整个hash表
进行锁定,而是局部锁定,也就是说当一个线程占有这个局部锁时,不影响其他线程对hash表其他地方的访问。
jsk1.8:
ConcurrentHashMap不再使用Segment分离锁,而是采用一种乐观锁CAS算法来实现同步问题,但其底层还是“数组+链表->红黑树”
的实现。
解决哈希冲突的方法:
一:开放定址法:(分为①线性探查法②线性补偿探测法③随机探测)
二:拉链法
(2)拉链法的优点
与开放定址法相比,拉链法有如下几个优点:
①拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;
②由于拉链法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况;
③开放定址法为减少冲突,要求装填因子α较小,故当结点规模较大时会浪费很多空间。而拉链法中可取α≥1,且结点较大时,
拉链法中增加的指针域可忽略不计,因此节省空间;
④在用拉链法构造的散列表中,删除结点的操作易于实现。只要简单地删去链表上相应的结点即可。而对开放地址法构造的散
列表,删除结点不能简单地将被删结 点的空间置为空,否则将截断在它之后填人散列表的同义词结点的查找路径。这是
因为各种开放地址法中,空地址单元(即开放地址)都是查找失败的条件。因此在 用开放地址法处理冲突的散列表上
执行删除操作,只能在被删结点上做删除标记,而不能真正删除结点。
(3)拉链法的缺点
 拉链法的缺点是:指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间,而若将节省的指
中间查了一道编程题:给定一个字符串,求出该字符串中出现次数最少的第一个字符?人家要求写的伪代码,当时没描述清晰
答:public static char getMinCountChar(String str){
char ch=' ';
char[] charArray=str.toCharArray();
Map<Character, Integer> charCount=new HashMap<Character,Integer>(); 
//将每种字符对应的出现次数放到map中
for(int i=0;i<charArray.length;i++){
int count=0;
if (!charCount.containsKey(charArray[i])) {
for(int j=i;j<charArray.length;j++){
if (charArray[j]==charArray[i]) {
count++;
}
}
charCount.put(charArray[i], count);
}
}
System.out.println(charCount);
//求出出现次数最小的数字
Object[] cc=charCount.values().toArray();
int minCount=(int)cc[0];
for(int k=0;k<cc.length;k++){
if (minCount > (int)cc[k]) {
minCount=(int)cc[k];
}
}
System.out.println("最小计数"+minCount);
//根据最小次数即value找到对应的key值,可能不唯一
Set<Entry<Character, Integer>> set=charCount.entrySet();
ArrayList<Character> arr=new ArrayList<Character>();
Iterator<Entry<Character, Integer>> it=set.iterator();
while (it.hasNext()) {
Entry<Character, Integer> en=it.next();
if (en.getValue()==minCount) {
arr.add(en.getKey());
}
}
System.out.println("出现次数最少的字符"+arr);
//找到出现次数最小的第一次出现的字符
for(int x=0;x<charArray.length;x++){
if (arr.contains(charArray[x])) {
ch=charArray[x];
break;
}
}
return ch;
}
异常都有哪些类?我答了运行时异常,编译异常,他说还有一个?是error吗?
线程问题:如何实现多线程?
JVM:内存都有哪些块?我答的持久代,老年代,年轻代,是这样回答吗?又问年轻代又分为哪些?我大eden和两个survivor区
答:简直牛头不对马尾。 
JVM内存分为四种:(栈区,堆区,静态区,代码区)
1:栈区(stacksegment):由编译区主动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束后,系统自动释放J
VM内存资源。
2:堆区(heapsegment):一般由程序员分配释放,存放由new创建的对象和数组,JVM不定时查看这个对象,如果没有引用指向这个对象
就回收。
3:静态区(datasegment):存放全局变量,静态变量和字符串常量,不释放
4:代码区(codesegment):存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域
在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配
的JVM内存空间;在堆中分配的JVM内存由java虚拟机的自动垃圾回收器来管理,堆的优势是可以动态分配JVM内存大小,生存期也不必事先告诉
编译器,因为它是在运行时动态分配JVM内存的。缺点就是要在运行时动态分配JVM内存,存取速度较慢;栈的优势是存取速度比堆要快,缺点是
存在栈中的数据大小与生存期必须是确定的无灵活性。
◆java堆由Perm区和Heap区组成,Heap区则由Old区和New区组成,而New区又分为Eden区,From区,To区,Heap={Old+NEW={Eden,From,To}}
Heap区分两大块,一块是NEWGeneration,另一块是OldGeneration.在NewGeneration中,有一个叫Eden的空间,主要是用来存放新生的对象,
还有两个SurvivorSpaces(from,to),它们用来存放每次垃圾回收后存活下来的对象。在OldGeneration中,主要存放应用程序中生命周期长
的JVM内存对象,还有个PermanentGeneration,主要用来放JVM自己的反射对象,比如类对象和方法对象等。
在NewGeneration块中,垃圾回收一般用Copying的算法,速度快。每次GC的时候,存活下来的对象首先由Eden拷贝到某个SurvivorSpace,当
SurvivorSpace空间满了后,剩下的live对象就被直接拷贝到OldGeneration中去。因此,每次GC后,EdenJVM内存块会被清空。在OldGeneration
块中,垃圾回收一般用mark-compact的算法,速度慢些,但减少JVM内存要求.
垃圾回收分多级,0级为全部(Full)的垃圾回收,会回收OLD段中的垃圾;1级或以上为部分垃圾回收,只会回收NEW中的垃圾,JVM内存溢出通常
发生于OLD段或Perm段垃圾回收后,仍然无JVM内存空间容纳新的Java对象的情况。
JVM调用GC的频度还是很高的,主要两种情况下进行垃圾回收:当应用程序线程空闲;另一个是JVM内存堆不足时,会不断调用GC,若连续回收
都解决不了JVM内存堆不足的问题时,就会报outofmemory错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。
根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。为了避免这些问题,程序的设计和编写就应避免垃圾对象的JVM
内存占用和GC的开销。显示调用System.GC()只能建议JVM需要在JVM内存中对垃圾对象进行回收,但不是必须马上回收,一个是并不能解决JVM
内存资源耗空的局面,另外也会增加GC的消耗。
◆当一个URL被访问时,JVM内存区域申请过程如下:
A.JVM会试图为相关Java对象在Eden中初始化一块JVM内存区域
B.当Eden空间足够时,JVM内存申请结束。否则到下一步
C.JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收),释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中
活跃对象放入Survivor区
D.Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区
E.当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)
F.完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建JVM内存区域,则出
现"outofmemory错误"
接下来就挂了/笑哭

转载地址:http://nktti.baihongyu.com/

你可能感兴趣的文章
3.5 YOLO9000: Better,Faster,Stronger(YOLO9000:更好,更快,更强)
查看>>
iOS菜鸟学习--如何避免两个按钮同时响应
查看>>
iOS菜鸟学习—— NSSortDescriptor的使用
查看>>
CORBA links
查看>>
如何使用BBC英语学习频道
查看>>
初识xsd
查看>>
java 设计模式-职责型模式
查看>>
构造型模式
查看>>
svn out of date 无法更新到最新版本
查看>>
java杂记
查看>>
RunTime.getRuntime().exec()
查看>>
Oracle 分组排序函数
查看>>
删除weblogic 域
查看>>
VMware Workstation 14中文破解版下载(附密钥)(笔记)
查看>>
日志框架学习
查看>>
日志框架学习2
查看>>
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
查看>>