个人总结,java面试经验。

版权声明:版权所有 盗版爆菊 https://blog.csdn.net/u012888052/article/details/80545437

PS:带图的,观察图,理解结构。

-------------------------------------------------------------------

1、TCP/IP协议

2、Java的集合类

主要由两个接口派生而出:Collection和Map,

Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。

3、数据库事物/spring事物

Read uncommitted 读未提交 产生脏读
Read committed 读提交 产生不可重复读
Repeatable read 重复读 出现幻读
Serializable Serializable 序列化 可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用
数据库事物,默认 Repeatable read(重复读)

4、分布式锁:

数据库乐观锁增加版本号;

数据库排他锁末尾增加“ for update”(不建议使用);

Redis 分布式锁,基于 SETNX、EXPIRE;

Zookeeper 分布式锁,很少使用,略。

5、Session 共享机制:

    使用分布式缓存方案比如 Memcached、Redis 进行存储session数据,进行共享。

6、线程状态图:



---------------------------------------------------------------------------------------------------------------------------------

//再来段朋友总结的:

MySQL考点

一、MySQL基础

    MySQL数据类型

        整形:TINYINTSMALLINTMEDIUMINTINTBIGINT,属性UNSIGNED

        长度:可以为整数类型指定宽度,例如:INT(11),对大多数应用是没有意义的,它不会限制值得合法范围,只会影响显示字符的个数。

        

            实数类型:FLOATDOUBLEDECIMAL

            DECIMAL可以存储比BIGINT还大的整数;可以用于存储精确的小数

            FLOATDOUBLE类型支持使用标准的浮点进行近似计算

            字符串类型:VARCHARCHARTEXTBLOG

            VARCHAR类型用于存储可变长字符串,它比定长类型更节省空间

            VARCHAR使用12个额外字节记录字符串的长度,列长度小于255字节,使用1个字节表示,否则用2

            VARCHAR长度,如果存储内容超出指定长度,会被截断

            CAHR是定长的,根据定义的字符串长度分配足够的空间

            CHAR会根据需要采用空格进行填充以方便比较

            CHAR适合存储很短的字符串,或者所有值都接近同一个长度

            CHAR长度,超出设定的长度,会被截断

            对于经常变更的数据,CHARVARCHAR更好,CHAR不容易产生碎片

            对于非常短的列,CHARVARCHAR在存储空间上更有效率

            只分配真正需要的空间,更长的列会消耗更多的内存

            尽量避免使用BLOB/TEXT类型,查询会使用临时表,导致严重的性能开销

            枚举:

                有时可以使用枚举代替常用的字符串类型

                把不重复的集合存储成一个预定义的集合

                非常紧凑,把列表值压缩到一个或两个字节

                内存存储的是整数

                尽量避免使用数字作为ENUM枚举的常量,易混乱

                排序是按照内部存储的整数进行排序

                枚举表会使表大小大大减小

            日期和时间类型

                尽量使用TIMESTAMP,比DATETIME空间效率高

                用整数保存时间戳的格式通常不方便处理

                如果需要存储微秒,可以使用bigint存储

            列属性:

                auto_incrementdefaultnot nullzerofill

    MySQL基础操作

        MySQL的链接和关闭:mysql -u -p -h -p

    MySQL存储引擎

        InnoDB表引擎:默认事务型引擎,最重要最广泛的存储引擎,性能非常优秀,数据存储在共享表空间,可以通过配置分开,对主键查询的性能高于其他类型的存储引擎,内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区。可以通过一些机制和工具支持真正的热备份。支持崩溃后的安全恢复。支持行级锁,支持外键。

        MyISAM表引擎:5.1版本前,MyISAM是默认的存储引擎,拥有全文索引、压缩、空间函数。不支持事务和行级锁,不支持崩溃后的安全恢复。表存储在两个文件,MYDMYI。设计简单,某些场景性能很好。

    MySQL锁机制

        共享锁和排他锁,其实就是读锁和写锁

        读锁:共享的,不堵塞,多个用户可以同时读一个资源,互不干扰

        写锁:排他的,一个写锁会阻塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取正在写入的资源。

        锁粒度:表锁,系统性能开销最小,会锁定整张表,MyISAM使用表锁 

        InnoDB实现行级锁

    MySQL事务处理、存储过程、触发器

        同一个事务,由多种存储引擎不靠谱,在非事务的表上执行事务操作MySQL不会发出提醒,也不会报错

        存储过程:

            为以后的使用而保存的一条或多条MySQL语句的集合

            存储过程就是业务逻辑和流程的集合

            可以再存储过程中创建表,更新数据,删除等等

            使用场景:

                通过把处理封装在容易使用的单元中,简化复杂的操作

                保证数据的一致性

                简化对变动的管理

        触发器提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程

            使用场景:

                可以通过数据库中的相关表实现级联更改

                实时监控某张表中的某个字段得更改而需要作出相应的处理

                某些业务编号的生成等

                滥用会造成数据库及应用程序的维护困难

二、创建高性能索引

    MySQL索引的基础和类型

        索引可以大大减少服务器需要扫描的数据量

        帮助服务器避免排序和临时表

        将随机I/O变顺序I/O

        大大提高查询速度,降低写的速度,占用磁盘

        普通索引

        唯一索引

        主键索引:不允许有控制

        组合索引

        外键索引

        全文索引

    MySQL索引的创建原则

        1.最适合索引的列是出现在WHERE子句的列

        2.索引列的基数越大,索引的效果越好

        3.对字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间

            例:alter table x_test add index(x_name(1)); 

        4.根据情况创建复合索引,复合索引可以提高查询效率

        5.避免创建过多索引,索引会额外占用磁盘空间,降低写操作效率

        6.主键尽坑你选择较短的数据类型,可以有效减少索引的磁盘占用提高查询效率    

    MySQL索引的注意事项

        1.复合索引遵循前缀原则

        2.like查询,%不能在前,可以使用全文索引

        3.column is null 可以使用索引

        4.如果MySQL估计使用索引比全表扫描更慢,会放弃使用索引

        5.如果or前的条件中的列有索引,后面的没有,索引都不会被用到

        6.列类型是字符串,查询时一定要给值加引号,否则索引失效

三、MySQL编写

四、MySQL优化

    查找分析查询速度慢的原因

        1.pt-query-digest工具分析慢语句

        2.show profile: set profiing=1;开启

        3.exlpain

    优化查询过程中的数据访问

        1.limit解决不需要查询的数据

        2.尽量不要返回全部列

        3.开启缓存

    优化长难的查询语句

        分解关联查询

    优化特定类型的查询语句

        count(*)会忽略所有列

        增加汇总表

        确定on或者using子句的列上有索引

        增加ORDER BY NULLMySQL不会再进行文件排序 


正则

一、单字符

范围内字符:单个字符[]

    数字字符:[0-9],[259]

    小写字符:[a-z]

    大写字符:[A-Z]

范围内字符:反向字符^

    取反:[^0-9],[^0]

任意字符

    代表任何一个字符:’.’

    注意与’[.]’’\.’的区别

        在中括号是代表点,在反义字符后

        对任一特殊字符使用反斜杠,即可对其转义并使之按字面解释,例如: 

• \\(对反斜杠转义)

• \[(对中括号转义)

• \{(对花括号转义)

• \.(对点转义)

二、其他符号

边界字符:头尾字符

    ^^root 注意与[^]的区别 

    

    $false$

    

    空行的表示:^$

元字符(代表普通字符或特殊字符)

    \w:匹配任何字类字符,包括下划线([A-Za-z0-9])

    \W:匹配任何非字类字符。([^A-Za-z0-9])

    \b:代表单词的分隔

    

三、字符组合

    字符串

        ‘root’  ‘1000’  ‘m..c’  ‘[A-Z][a-z]’   ‘[0-9][0-9]’

    重复

        *零次或多次匹配前面的字符或子表达式

        +一次或多次匹配前面的字符或子表达式

        ?零次或一次匹配前面的字符

    重复特定次数:{n,m}

        *{0,}

        +{1,}

        ?{0,1}

四、字符组合

    任意字符串的表示:.*

        例如:^r.*  m.*c

        注意与m..c区别

        

    逻辑的表示

        |’/bin\(false\|true\)’

五、案例

    匹配4-10位的qq

        ‘^[0-9]\{4,10\}$’

    匹配15位或18位身份证号

        ‘^[1-9]\([0-9]\{13\}\|[0-9]\{16\}\)[0-9xX]$’

    匹配密码(由数字、26个字母和下划线组成)

        ‘^\w\+$’

六、总结

    

    



Linux常用命令

系统安全

sudosuchmodsetfacl

进程管理

wtoppskillpkillpstreekillall

用户管理

idusermoduseraddgroupadduserdel

文件系统

mountumountfsckdfdu

系统关机和重启

shutdownreboot

网络应用

curltelnetmailelinks

网络测试

pingnetstathost

网络配置

hostnameifconfig

常用工具

sshscreenclearwhodate

软件包管理

yumrpmapt-get

文件查找和比较

locatefind

文件内容查看

headtaillessmore

文件处理

touchunlinkrenamelncat

目录操作

cdmvrmpwdtreecpls

文件权限属性

setfaclchmodchownchgrp

压缩/解压

bzip2/bunzip2gzip/gunzipzip/unziptar

文件传输

ftpscp

Linux系统定时任务

crontab命令

crontab -e

*****命令(分时日月周)

at命令

# at 2:00 tomorrow

 

vi/vim编辑器

shell基础

赋予权限,直接执行,例:chmod+x test.sh./test.sh

调用解释器使得脚本执行,例:bashcshcshashbshksh等等

使用source命令,例:sourche test.sh

编写基础

    开头用#!指定脚本解释器,例如#!/bin/sh

    编写具体功能

Awk命令

一、介绍

    文本与数据处理工具,它可编程,处理灵活,功能强大,例如它可以统计,可以制表

    1.awk行处理方式与格式

    2.awk内嵌参数应用

    3.awk内嵌程序应用

二、awk处理方式

    awk一次处理一行内容,awk对每行可以切片处理

        例:$ awk ‘{print $1}’   //输出首个单词

    使用awk—格式

        命令行格式

            $ awk [options] ‘command’ file(s)

            基本格式

                commandpattern{awk操作命令}   pattern:正则表达式;逻辑判断式

                操作命令

                    内置函数:print()   printf()  getline…;

                控制指令:

                    if(){…}else{…};while(){…};

            扩展格式

        脚本格式

            $ awk -f awk-script-file file(s)

三、awk内置参数应用

    awk内置变量1

        $0:表示整个当前行

        $1:每行第一个字段

        $2:每行第二个字段

    awk内置参数:分割符

        options: -F filed-separator(默认为空格)

        例:$ awk -F ‘,’ ‘{print $3}’ /etc/passwd

    awk内置变量2

        NR:每行的记录号

        NF:字段数量变量

        FILENAME:正在处理的文件名

        例:$ awk -F ‘,’ ‘{print NR,NF}’ /etc/passwd

        例:$ awk -F ‘,’ ‘{print FILENAME}’ /etc/passwd

四、awk内置参数应用

    显示/etc/passwd每行的行号,每行的列数,对应行的用户名(print,printf)

        $  awk -F ‘:’ ‘{printf(“Line:%s Col:%s User:%s\n”,NR,NF,$1)}’ /etc/passwd

    显示/etc/passwd中用户ID大于100的行号和用户名(if...else...) 

       $  awk -F ‘:’ ‘{if($3>100) print ”Line: “NR,”User: “$1}’ /etc/passwd

    在服务器log中找出 ‘Error’的发生日期

        awk ‘/Error/ {print $1}’ error.log

         

五、awk—逻辑判断式

    ~,!~:匹配正则表达式

    ==,!=,<,>:判断逻辑表达式

    例:$ awk -F ‘:' ‘$1~/m.*/{print $1}’ passwd

    例:$ awk -F ‘:' ‘$3>100{print $1,$3}’ passwd

六、awk扩展格式

    例:制表显示/etc/passwd每行的行号,每行的列数,对应的用户名

    例:$ awk -F ‘:’ ‘BEGIN{print “Line Col User”} {print NR,NF,$1}END{print "———“FILEAME”-----"}’ passwd

七、逻辑处理案例

    统计当前文件夹下的文件/文件夹占用的大小

    ls -l | awk ‘BEGIN{size=0}{size+=5}END{print “size is “size/1024/1024”M"}’

     

    统计显示/etc/passwd的账户总人数

    $ awk -F ‘:’ ‘BEGIN{count=0}$1!~/^$/{count++}END{print “count = “ count}’

    统计UID显示大于100的用户名

    

    统计netstat -anp 状态下为LISTENCONNECTED的连接数量

    netstat -anp | awk ‘$6~/CONNECTED|LISTEN/{sum[$6]++}END{for (i in sum) print i,sum[i]}’

    

    

猜你喜欢

转载自blog.csdn.net/u012888052/article/details/80545437
今日推荐