总结与归纳不足
文章目录
一、数据库MySQL
1、给已存在的表添加NotNull约束:alter table score modify s_score int not null;
2、更新语句:'UPDATE runoob_tbl SET runoob_title="学习 Python" WHERE runoob_id=3';
3、查询每个班数学前三名的学生姓名:
select name from student where s_id in (
select s_id, @m:=@m+1 r from score, (select @m=0)a where c_id = '02' order by s_score desc limit 3);
二、选择题
1.运行在不同主机上的进程通信
套接字。
2、“TCP/IP 协议的传输层协议不能提供无连接的服务”:错误的
TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。
TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用层,这里面有http,ftp,等等我们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协议就在这个层次。第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。
所以是错误的,UDP可以提供。
3、排序算法
4、java线程安全的集合
- 早期线程安全的集合:Vector、HashTable
1.Vector Vector和ArrayList类似,是长度可变的数组,与ArrayList不同的是,Vector是线程安全的,它给几乎所有的public方法都加上了synchronized关键字。由于加锁导致性能降低,在不需要并发访问同一对象时,这种强制性的同步机制就显得多余,所以现在Vector已被弃用
2.HashTable HashTable和HashMap类似,不同点是HashTable是线程安全的,它给几乎所有public方法都加上了synchronized关键字,还有一个不同点是HashTable的K,V都不能是null,但HashMap可以,它现在也因为性能原因被弃用了 - Collections包装方法
Vector和HashTable被弃用后,它们被ArrayList和HashMap代替,但它们不是线程安全的,所以Collections工具类中提供了相应的包装方法把它们包装成线程安全的集合
代码如下(示例):
List<E> synArrayList = Collections.synchronizedList(new ArrayList<E>());
Set<E> synHashSet = Collections.synchronizedSet(new HashSet<E>());
Map<K,V> synHashMap = Collections.synchronizedMap(new HashMap<K,V>());
...
Collections针对每种集合都声明了一个线程安全的包装类,在原集合的基础上添加了锁对象,集合中的每个方法都通过这个锁对象实现同步
- java.util.concurrent包中的集合
1.ConcurrentHashMap
ConcurrentHashMap和HashTable都是线程安全的集合,它们的不同主要是加锁粒度上的不同。HashTable的加锁方法是给每个方法加上synchronized关键字,这样锁住的是整个Table对象。而ConcurrentHashMap是更细粒度的加锁
在JDK1.8之前,ConcurrentHashMap加的是分段锁,也就是Segment锁,每个Segment含有整个table的一部分,这样不同分段之间的并发操作就互不影响
JDK1.8对此做了进一步的改进,它取消了Segment字段,直接在table元素上加锁,实现对每一行进行加锁,进一步减小了并发冲突的概率
2.CopyOnWriteArrayList和CopyOnWriteArraySet
它们是加了写锁的ArrayList和ArraySet,锁住的是整个对象,但读操作可以并发执行
3.
除此之外还有ConcurrentSkipListMap、ConcurrentSkipListSet、ConcurrentLinkedQueue、ConcurrentLinkedDeque等,至于为什么没有ConcurrentArrayList,原因是无法设计一个通用的而且可以规避ArrayList的并发瓶颈的线程安全的集合类,只能锁住整个list,这用Collections里的包装类就能办到
三、编程题
给定一些正数(代表长度)组成的数组A,返回由其中三个组成的面积不为0的三角形的最大周长。
代码如下(示例):
public int largestPerimeter(int[] A) {
Arrays.sort(A);
for(int i = A.length - 1; i >= 2; i--) {
int a = A[i];
int b = A[i - 1];
int c = A[i - 2];
if(a < b + c && b < a + c && c < b + a){
return a + b + c;
}
}
return 0;
}
该处使用的url网络请求的数据。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了恒生笔试时自己遇到的一些问题。