1. 与10.110.12.29 mask225.225.225.224属于同一网段的IP地址是
- 10.110.12.31
- 10.110.12.0
- 10.110.12.32
- 10.110.12.30
2. 事务的持续性是指:
- 一个事务内部的操作及使用的数据对并发的其他事务是隔离的(隔离性)
- 事务一旦提交,对数据库的改变是永久的(持久性/持续性)
- 事务必须是使数据库从一个一致性状态变到另一个一致性状态(一致性)
- 事务中包括的所有操作要么都做,要么不做(原子性)
3. 8人排队上车,其中A,B两人之间恰好有4人,则不同的排列方法是:
4.下列关于java异常的说法,正确的是( )
- 程序所有的可能出现的异常必须在catch中捕获,否则将引起编译错误;
- 在方法定义中以throws标识出异常,在调用该方法中的方法中必须处理;
- RuntimeException及其子类的异常不可以做出处理;
- catch段中的语句,不允许再次出现异常;
5.进行一系列独立实验,每次实验成功的概率是P,则在成功两次之前已经失败3次的概率为( )
6.关于TCP协议,下列说法错误的是( )
- TCP提供了拥塞控制的机制( 慢开始,拥塞避免,快重传,快恢复)
- TCP是面对连接的协议
- TCP属于传输层协议
- TCP是基于数据报文的协议(基于字节流)
7.已知一个由5个顶点8条边构成的有向图,以下说法正确的是( )
- 各顶点的入度之和为8
- 各顶点的度之和为8(出度入度均为8)
- 若以邻接矩阵作为存储结构,矩阵中非0元素的个数为16( 5*5 - 8 = 17)
- 若以邻接表作为存储结构,邻接表中结点的个数为16( 5 + 8 = 13)
8.short a = -4 ; a为16位整型,则a的2的补码表示是—0xfffc
补码运算:正数为原码本身,负数为原码取反加一
9.关于排序算法下列说话错误的是
- 冒泡排序的空间复杂度小于快速排序
- 快速排序是稳定排序( 不稳定 )
- 堆排序是非稳定排序
- 归并排序的时间复杂度是0( n long n )
10.二叉树已知前序遍历结果为:GDAFEMHZ , 中序遍历的结果是 :ADEFGHMZ , 求后序遍历结果
编程题:
1. 输入参数为一个字符串,仅由大括号{ }、中括号[ ] 、小括弧( )组成,要求必须满足算术表达式的要求,即嵌套以及成对出现。即大括号{ } 以内可以出现中括号[ ] 、小括弧( );中括号[ ] 内只能出现小括弧( )
{ [ ( ) ] } 符合要求
( [ ] ) 不符合
[ { } ] 不符合
#include<iostream>
#include<stack>
using namespace std;
bool fun( string str ){
//如果为空或者只有一个字符,直接返回false
if( str.size() == 0 || str.size() == 1 )
return false;
stack<char> s;//辅助栈
for(int i = 0 ; i < str.size() && str[i] != '\n' ; i++ ){
if( s.empty() ){//如果栈为空
if( str[i]=='(' || str[i]=='[' || str[i]=='{' ) s.push( str[i] );
else
return false ; //如果为右括号直接返回false
}
//如果栈不为空
else if( ( str[i] == '[' && s.top() == '{') || ( str[i] == '(' && ( s.top() == '{' || s.top() == '[')) )
s.push( str[i] ); //满足规则,入栈
else if( (str[i] == ')'&&s.top() =='(') || (str[i] == ']'&&s.top() =='[') || (str[i] == '}'&&s.top() =='{') )
s.pop();
else
return false ; //如果为右括号直接返回false
}
if(s.empty())
return true;
return false;
}
int main(){
string str;
while(1){
cin>>str;
if(fun(str))
cout<<str<<"符合要求 "<<endl ;
else
cout<<str<<"不符合要求 "<<endl ;
}
return 0 ;
}
2.盛最多水的容器
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:不能倾斜容器,且 n 的值至少为 2。 原题地址
class Solution {
public:
int maxArea(vector<int>& height) {
if( height.size() <= 1 )
return 0;
int l = 0; int res = 0 ;
int r = height.size() - 1 ;
while( l < r ){
res = max( min( height[l] , height[r] ) * ( r - l ) , res );
if( height[l] < height[r] ) ++l;
else --r;
}
return res;
}
};
双指针法,官方给的题解挺清楚的。
3. 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解析:从头遍历整个链表,如果当前节点的值与下一个节点的值相同,那么他们就是重复的节点,都可以被删除。为了保证删除之后的链表还是相连的,我们要把当前节点的前一个节点的和后面没有重复的节点相连
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead==NULL||pHead->next==NULL) return pHead;//如果链表为空 或者链表内只有一个节点 直接返回。
// 虚拟头节点,不用考虑头节点可能被删掉的情况 可以简化代码
auto dummy = new ListNode(-1);
dummy->next = pHead;
ListNode* p = dummy; //上一次保留节点的位置
while(p->next!=NULL){
auto q = p->next;
//如果 q的值 与 p的下一个节点值 相同 ,q往前移动
while(q && p->next->val == q->val) q = q->next;
if(p->next->next == q) //如果相同段长度为1,即没有重复,直接后移一位即可
p = p->next;
else//如果有重复,删除重复段
p->next = q;
}
return dummy->next;
}
};