1.进程和线程的区别?
操作系统要做一件事情,运行一个任务,运行的任务就是一个程序,每个运行中的程序就是一个进程;线程是一个顺序执行流,它是进程的组成部分,一个进程中可以有多个线程。
进程特性:
独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间;
动态性:进程是一个系统中运行的指令集合;
并发性:进程之间交替着执行。
线程特性:
进程之间不能共享内存,单线程之间共享内存非常的容易;
一个进程中可以执行多线程任务,比多进程实现并发效率高。
区别:
进程之间相互独立,同一个进程下的线程之间共享全部资源;
进程有自己独立的内存空间,线程共享进程的内存空间。
2.学生表:Student 学生表 (学号,姓名,性别,年龄,组织部门)
Course 课程表 (编号,课程名称)
Sc 选课表 (学号,课程编号,成绩)
(1).写一个SQL语句,查询选修了’计算机原理’的学生学号和姓名
select stu.sid, stu.sname from Student stu ,course c,sc s
where
stu.sid=s.sid and c.cid=s.cid and c.cname='计算机原理';
(2).写一个SQL语句,查询’周星驰’同学选修了的课程名字
SELECT cname from course where cid in
(SELECT cid from sc s, student stu
WHERE stu.sid=s.sid and stu.sname='周星驰');
(3).写一个SQL语句,查询选修了5门课程的学生学号和姓名
select stu.sid, stu.sname from student stu
where (select count(*) from sc where sid=stu.sid) = 5;
3.单例模式:完成一个类,在应用程序生命周期内只能有一个实例(其他的类不能生成这个类的新实例)。
package org.xsx.test;
public class Singleton {
private Singleton() {
}
private static Singleton instance = new Singleton();
public static Singleton getInstace() {
return instance;
}
}
package org.xsx.test;
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
4.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
package org.xsx.test;
public class Example2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(getSum(100, 10));
}
public static int getSum(int i, int num) {//递归
int sum = 0;
if (num == 1) {
return sum;
}
sum = sum + i + 2 * getSum(i / 2, num - 1);
return sum;
}
}
5.花式打印
在控制台下,输入n时打印如下的文字:
1
2 3n-3
… 3n-2 …
… … … …
… … … … 2n
n n+1 … … … 2n-1
比如在输入为5的时候为:
1
2 12
3 13 11
4 14 15 10
5 6 7 8 9
提示:三角形每一圈的的周长都是很容易算出来的。只要算出当前坐标所在的圈数,然后再计算当前坐标为当前圈的第几个数字就可以轻松算出每个坐标对应的数字了。
#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
bool setdata(int ,int ,int** ,int&,int,int);
void main()
{
int n;
cout<<"请输入数据 n "<<endl;
cin>>n;
//二维数组动态分配空间
int **data;
data = new int*[n];
for(int i=0;i<n;i++)
data[i] = new int[n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
data[i][j]=0;
int nCount=1,k=1,ii(0),jj(0);
//递归调用
setdata(ii,jj,data,nCount,n,n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(data[i][j])
cout<<setw(8)<<data[i][j]<<" ";
else
cout<<endl;
}
//释放内存空间
for(int i=0;i<n;i++)
delete[] data[i];
delete[] data;
cout<<endl;
}
bool setdata(int i,int j,int** data1,int& nValue,int nPx,int nPy)
{
bool flag = false;
//0~nP行赋值,指到了nP行
for( ;i<nPx;i++)
{
data1[i][j]= (nValue++);
flag = true;
}
if(flag)
{
--i;flag = false;
nValue--;
}
//列数据
//0~nP列赋值,指到了nP列
for(;j<nPy;j++)
{
data1[i][j]=(nValue++);
flag = true;
}
if(flag)
{
--j;
flag=false;
}
int m=nPx-nPy;
for(;m<nPy-2;m++)
{
data1[--i][--j] =(nValue++);
}
i++;
nPx-=1;
nPy-=2;
if(nPx<0 || nPy<0)
return false;
else
setdata(i,j,data1,nValue,nPx,nPy);
}