1. 面试官问一台机器内存或者磁盘占用99% 再点一下就挂了,个人刚开始反应内存不足加内存,磁盘不足加磁盘,还有啥办法,有些时候没干过的事一定要大胆,敲命令都敲不成,只能换磁盘了和加内存了,要么停机,
top -o %MEM # 按内存排序进程,记录高占用PID
top -o %MEM -b -n 1 | head -12 | tail -n +7 |awk '{print $NF " " $1}'
free -h
(base) [root@elastic-07 arthas]# free -hl
(base) [root@elastic-07 arthas]# free -h -s 5 -c 3
(base) [root@elastic-07 arthas]# free -h -t
df -h
df -h | grep -E '9[0-9]%|100%' // 查看使用率超过90%的分区
du
du -h --max-depth=2 | sort -hr | head -10
kill -9 <PID> # 优先终止非核心进程(如异常Java进程、失控脚本):ml-cita
2. 最长连续不重复子串
public String longestStr(String str){
int len = str.length();
int [][] dp = new int [len][len];
for(int i = 0; i < str.length(); i++){
dp[i][i] = 1;
}
int max = 0;
String s = "";
for(int i = 0; i < len; i++){
List<Character> list = new ArrayList<>();
list.add(str.charAt(i));
for(int j = i + 1; j < len; j++){
if(list.contains(str.charAt(j))){
dp[i][j] = dp[i][j - 1];
break;
}else{
dp[i][j] = dp[i][j - 1] + 1;
if(max < dp[i][j]){
s = str.substring(i, j);
max = dp[i][j];
}
list.add(str.charAt(j));
}
}
list.clear();
}
return s;
}
2.循环打印ABC ,有没有啥更轻量级的
public static void printABC(){
AtomicInteger integer = new AtomicInteger(1);
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if(integer.get() > 100){
break;
}
if(integer.get() % 3 == 1){
System.out.println(integer.get()+":\t A");
integer.getAndAdd(1);
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if(integer.get() > 100){
break;
}
if(integer.get() % 3 == 2 ){
System.out.println(integer.get()+":\t B");
integer.getAndAdd(1);
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if(integer.get() > 100){
break;
}
if(integer.get() % 3 == 0){
System.out.println(integer.get()+":\t C");
integer.getAndAdd(1);
}
}
}
}).start();
}
private static Thread t2 = null;
private static Thread t3 = null;
private static Thread t1 = null;
static volatile int i = 1;
public static void printABCTwo(){
t1 = new Thread(new Runnable() {
@Override
public void run() {
while(i < 100){
if(i%3 == 1 && i == 1){
System.out.println(i+":\t A");
LockSupport.unpark(t2);
i++;
}else if(i % 3 == 1){
LockSupport.park();
System.out.println(i+":\t A");
LockSupport.unpark(t2);
i++;
}
}
}
});
t2 = new Thread(new Runnable() {
@Override
public void run() {
while(i < 100){
if(i % 3 == 2) {
LockSupport.park();
System.out.println(i + ":\t B");
i++;
LockSupport.unpark(t3);
}
}
}
});
t3 = new Thread(new Runnable() {
@Override
public void run() {
while(i < 100){
if(i%3 == 0) {
LockSupport.park();
System.out.println(i + ":\t C");
i++;
LockSupport.unpark(t1);
}
}
}
});
t1.start();
t2.start();
t3.start();
}
static void printABCThree(){
Semaphore s1 = new Semaphore(1);
Semaphore s2 = new Semaphore(0);
Semaphore s3 = new Semaphore(0);
t1 = new Thread(new Runnable() {
@Override
public void run() {
while(i <= 100){
if(i%3 == 1) {
try {
s1.acquire();
System.out.println(i+":\t A");
s2.release();
i++;
} catch (Exception e){
e.printStackTrace();
}
}
}
}
});
t2 = new Thread(new Runnable() {
@Override
public void run() {
while(i <= 100){
if(i%3 == 2) {
try {
s2.acquire();
System.out.println(i+":\t B");
s3.release();
i++;
} catch (Exception e){
e.printStackTrace();
}
}
}
}
});
t3 = new Thread(new Runnable() {
@Override
public void run() {
while(i <= 100){
if(i%3 == 0) {
try {
s3.acquire();
System.out.println(i+":\t C");
s1.release();
i++;
} catch (Exception e){
e.printStackTrace();
}
}
}
}
});
t1.start();
t2.start();
t3.start();
}
4. 线程池有哪些参数
5. LIst 和Map 有啥区别,jdk 1.7 和 jdk 1.8 HashMap 数据结构变化。HashMap 是线程安全的吗?