自总结面试

1.排序问题

//冒泡

{2,3,1,4,6,5}

For(ini i=0;i<arr.length;i++){

For(j=0;i<a.length-i-1;j++){

If(arr[j]>arr[j+1]){

 

}

}

}

//选择

{2,3,1,4,6,5}

Fot(int i=0;i<arr.length-1;i++){

For(int j=i+1;arr.length;j++){

If(arr[i]>arr[j]){

 

}

}

}

  1. &和&&区别
    1. &可以进行位运算和布尔运算,无短路特性
    2. &&只能进行布尔运算,有短路特性

 

  1. 重写和重载的区别?

重写(override)

    1. 存在继承关系
    2. 方法名,参数列表,返回值均相同
    3. 修饰符范围和父类相同或者比父类更宽泛
    4. 自雷方法中不允许抛出比父类中更多更宽的异常

重载(overload)

  1.  方法名相同
  2.  参数列表不同(个数,顺序,类型)
  3.  修饰符。返回值,异常无要求
  1. 递归算法

public static int diGui(int number){

If(number == 1){

Return 1;

}else{

Return number*diGui(number - 1)

}

}

  1. 接口和抽象类的区别
    1. 关键字 Abstract class interface
    2. 构造方法 有 无
    3. 类型 类 无
    4. 继承关系 单继承 多继承
    5. 继承关键字 extends implements
    6. 方法 普通/抽象 全部为抽象

 

相同点

e) 均可以声明引用,但不可以创建对象

f) 不能创建对象

抽象类:abstract标识此类不是完整类,所以不能

接口:没有构造,所以不能

g) 均编译成.class文件

  1. ==和equal

==比较地址:

若常量-128-127范围,从常量池中调用,地址相同

Equal内容:

默认比较地址,重写之后比较内容

  1. int和integer
  1. 基本类型和包装类(对象)
  2. =0和null
  1. List/set/map
  1. List:有序,有下标,存取元素可重复
  2. Set:无序,无下标,存取元素不可重复
  3. Map:键无序,无下标,不可重复

  值无序,无下标,允许重复

  1. Arraylist/vector/linkedlist
  1. Arraylist:用数组实现,查询快,增删慢

线程不安全,速度快(内部方法不是同步方法)

  1. Vevtor:用数组实现,查询快,增删慢

线程安全,运行慢(内部方法是同步方法)

  1. Linkedlist:用链表实现,增删快,查询慢
  1. Hashmap/hashtable/treemap
    1. Hashmap:允许null作为key/value线程不安全,轻量级,速度快
    2. Hashtable:不允许null作为key/value线程安全,重量级,速度慢
    3. Treemap:实现sortmap自动对key排序
  1. final/finalize/finally
    1. Final:生命属性方法和类,属性不可变,方法不可覆盖,类不可继承
    2. Finally:异常处理一部分,无论是否有异常均会执行的代码块
    3. Finalize:object中的一个方法,回收垃圾是调用此方法
  1. 实现线程两种方式,区别
    1. 继承thread/实现runnable接口
    2. 继承thread就不可以继承其他类了,而实现runnable接口还有机会继承其他类
    3. 继承Thread类的引用直接创建线程对象而实现runnable接口的类,首先需要创建一个目标对象,然后以目标对象作为thread的参数创建线程
  1. 开启线程
    1. Mt.start();
  1. sleep和wait区别
    1. Sleep():在指定毫秒数内,使用当前正在执行的线程休眠(使线程进入阻塞状态)但不会释放对象锁
    2. Wait():使线程处于等待状态(进入队列状态),并释放自己获得锁,直到被notify()唤醒后才能进入锁池状态,而执行下阶段
  1. mysql和oracle区别
    1. Mysql以数据库模式管理,oracle以用户模式管理
    2. Mysql使用limit分页,oracle使用rownum分页
    3. Mysql为id赋予自增功能,oracle创建sequence序列
    4. Mysql中show tables/databses,oracle中无show
    5. Mysql中无to_char to_date,oracle中有这两个函数
  1. sql查询语句执行顺序
    1. From
    2. Where
    3. Group by
    4. Having
    5. Select
    6. Order by
  1. request和response
    1. 请求转发:参数url-pattern,对象共享,动作发生于服务器内部,地址栏不变,一次请求
    2. 请求重定向:参数uri,携带对象,动作发生于浏览器,地址栏不变,至少两次请求
  1. jsp和servlet区别
    1. Jsp是servlet技术扩展形式,是servlet的简易形式
    2. Servlet是jsp的基础,jsp是servlet的升级版
    3. 同样是服务器程序,jsp侧重于视图,servlet主要用于控制逻辑
    4. Jsp编写完成直接部署直接访问,不需要再web.xml中配置,servlet需要
    5. 当请求访问jsp,按照特定的规则语法翻译成servlet程序,然后按照servlet运行方式执行
  1. struts2和spring区别
    1. Struts2通过成员变量(实体,数组,集合)手机client参数
    2. Struts2采用DMI编程方式减少action开发数量,将类转换为方法
    3. Struts2拦截器及值栈机制
  1. #和$符号的区别
    1. #的取值会加上双引号,$取值直接获得值不加双引号
    2. $相当于statement(存在sql注入),order by ${列名}

#相当于preparestatement(避免sql注入)

  1. mybatis和hibernate区别
    1. 自动orm映射
    2. 动态sql机制
  1. Spring
    1. IOC:控制反转:反转依赖关系,原来自己创建实现类,现在是工厂给,体现在:<bean id=”userDao” class=”com.bai.UserDaoImpl”></bean>
    2. Di:依赖注入/构造注入/自动注入:将实现类的依赖,转移到配置文件中
    3. AOP:面向切面编程,原来编程单位是class,现在是切面,通过动态代理实现,切面=额外功能+切入点,体现在:对一个类添加额外功能

 

 

 

数据库优化

优化知识

  1. 什么情况下应不建或少建索引
    1. 表记录太少 
    2. 经常插入、删除、修改的表
    3. 数据重复且分布平均的表字段
  2. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了insert 及 update 的 效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要
  3. 数据库性能下降,想找到哪些sql耗时较长,应该如何操作? my.cnf里如何配置?
    1. show processlist; 
    2. select * from information_schema.processlist ; 
    3. 可以在[mysqld]中添加如下: 
        log =/var/log/mysql.log 
      如果需要监控慢查询 
        log-slow-queries = /var/log/slowquery.log 
        long_query_time = 1

 

 

Sql表结构

  1. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了
  2. 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些

 

 

Sql语法

  1. 不要对列计算操作(会引起全表扫描)

select * from users where YEAR(adddate)<2007; 

  1. 不使用NOT IN可以NOT EXISTS代替(会引起全表扫描)
  2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0
  3. 应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描,可以使用第6条
  4. 应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or num=20可以这样查询:select id from t where num=10 union all select id from t where num=20 
  5. in 和 not in 也要慎用,否则会导致全表扫描,如:select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 3
  6. 很多时候用 exists 代替 in 是一个好的选择
  7. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段
  8. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理

 

Sql策略

1.考虑在 where 及 order by 涉及的列上建立索引

 

 

优化MySql

  1. 高并发情况下:使用mysql源码包安装,执行效率更高
  2. 在编译时优化MySQL(使用pgcc(Pentium GCC)编译器)
  3. 优化工具(优化工具/EXPLAIN/OPTIMIZE)
  4. MySQL你都修改了那些配置文件来进行优化?

innodb_buffer_pool_size:这是你安装完InnoDB后第一个应该设置的选项。缓冲池是数据和索引缓存的地方:这个值越大越好,这能保证你在大多数的读取操作时使用的是内存而不是硬盘。典型的值是5-6GB(8GB内存),20-25GB(32GB内存),100-120GB(128GB内存)。 
  innodb_log_file_size:这是redo日志的大小。redo日志被用于确保写操作快速而可靠并且在崩溃时恢复。一直到MySQL 5.1,它都难于调整,因为一方面你想让它更大来提高性能,另一方面你想让它更小来使得崩溃后更快恢复。幸运的是从MySQL 5.5之后,崩溃恢复的性能的到了很大提升,这样你就可以同时拥有较高的写入性能和崩溃恢复性能了。一直到MySQL 5.5,redo日志的总尺寸被限定在4GB(默认可以有2个log文件)。这在MySQL 5.6里被提高。 
  一开始就把innodb_log_file_size设置成512M(这样有1GB的redo日志)会使你有充裕的写操作空间。如果你知道你的应用程序需要频繁的写入数据并且你使用的时MySQL 5.6,你可以一开始就把它这是成4G。max_connections:如果你经常看到‘Too many connections’错误,是因为max_connections的值太低了。这非常常见因为应用程序没有正确的关闭数据库连接,你需要比默认的151连接数更大的值。max_connection值被设高了(例如1000或更高)之后一个主要缺陷是当服务器运行1000个或更高的活动事务时会变的没有响应。在应用程序里使用连接池或者在MySQL里使用进程池有助于解决这一问题。 
  InnoDB配置 
  从MySQL 5.5版本开始,InnoDB就是默认的存储引擎并且它比任何其他存储引擎的使用都要多得多。那也是为什么它需要小心配置的原因。 
  innodb_file_per_table:这项设置告知InnoDB是否需要将所有表的数据和索引存放在共享表空间里 (innodb_file_per_table = OFF)或者为每张表的数据单独放在一个.ibd文件(innodb_file_per_table = ON)。每张表一个文件允许你在drop、truncate或者rebuild表时回收磁盘空间。这对于一些高级特性也是有必要的,比如数据压缩。但是它不会带来任何性能收益。你不想让每张表一个文件的主要场景是:有非常多的表(比如10k+)。 
  MySQL 5.6中,这个属性默认值是ON,因此大部分情况下你什么都不需要做。对于之前的版本你必需在加载数据之前将这个属性设置为ON,因为它只对新创建的表有影响。 
  innodb_flush_log_at_trx_commit:默认值为1,表示InnoDB完全支持ACID特性。当你的主要关注点是数据安全的时候这个值是最合适的,比如在一个主节点上。但是对于磁盘(读写)速度较慢的系统,它会带来很巨大的开销,因为每次将改变flush到redo日志都需要额外的fsyncs。将它的值设置为2会导致不太可靠(reliable)因为提交的事务仅仅每秒才flush一次到redo日志,但对于一些场景是可以接受的,比如对于主节点的备份节点这个值是可以接受的。如果值为0速度就更快了,但在系统崩溃时可能丢失一些数据:只适用于备份节点。 
  innodb_flush_method: 这项配置决定了数据和日志写入硬盘的方式。一般来说,如果你有硬件RAID控制器,并且其独立缓存采用write-back机制,并有着电池断电保护,那么应该设置配置为O_DIRECT;否则,大多数情况下应将其设为fdatasync(默认值)。sysbench是一个可以帮助你决定这个选项的好工具。 
  innodb_log_buffer_size: 这项配置决定了为尚未执行的事务分配的缓存。其默认值(1MB)一般来说已经够用了,但是如果你的事务中包含有二进制大对象或者大文本字段的话,这点缓存很快就会被填满并触发额外的I/O操作。看看Innodb_log_waits状态变量,如果它不是0,增加innodb_log_buffer_size。 
  其他设置 
  query_cache_size: query cache(查询缓存)是一个众所周知的瓶颈,甚至在并发并不多的时候也是如此。 最佳选项是将其从一开始就停用,设置query_cache_size = 0(现在MySQL 5.6的默认值)并利用其他方法加速查询:优化索引、增加拷贝分散负载或者启用额外的缓存(比如memcache或redis)。如果你已经为你的应用启用了query cache并且还没有发现任何问题,query cache可能对你有用。这是如果你想停用它,那就得小心了。 
  log_bin:如果你想让数据库服务器充当主节点的备份节点,那么开启二进制日志是必须的。如果这么做了之后,还别忘了设置server_id为一个唯一的值。就算只有一个服务器,如果你想做基于时间点的数据恢复,这(开启二进制日志)也是很有用的:从你最近的备份中恢复(全量备份),并应用二进制日志中的修改(增量备份)。二进制日志一旦创建就将永久保存。所以如果你不想让磁盘空间耗尽,你可以用 PURGE BINARY LOGS 来清除旧文件,或者设置 expire_logs_days 来指定过多少天日志将被自动清除。 
  记录二进制日志不是没有开销的,所以如果你在一个非主节点的复制节点上不需要它的话,那么建议关闭这个选项。
  skip_name_resolve:当客户端连接数据库服务器时,服务器会进行主机名解析,并且当DNS很慢时,建立连接也会很慢。因此建议在启动服务器时关闭skip_name_resolve选项而不进行DNS查找。唯一的局限是之后GRANT语句中只能使用IP地址了,因此在添加这项设置到一个已有系统中必须格外小心。

 

 

 

MySQL调优

  1. 硬件配置优化 
        Ø CPU选择:多核的CPU,主频高的CPU 
        Ø 内存:更大的内存 
        Ø 磁盘选择:更快的转速、RAID、阵列卡, 
        Ø 网络环境选择:尽量部署在局域网、SCI、光缆、千兆网、双网线提供冗余、0.0.0.0多端口绑定监听 
    2.操作系统级优化 
        Ø 使用64位的操作系统,更好的使用大内存。 
        Ø 设置noatime,nodiratime 
        Ø 优化内核参数 
        Ø 加大文件描述符限制 
        Ø 文件系统选择 xfs 
    3.Mysql设计优化 
        III.1 存储引擎的选择 
          Ø Myisam:数据库并发不大,读多写少,而且都能很好的用到索引,sql语句比较简单的应用,TB数据仓库 
          Ø Innodb:并发访问大,写操作比较多,有外键、事务等需求的应用,系统内存较大。 
        III.2 命名规则 
          Ø 多数开发语言命名规则:比如MyAdress 
          Ø 多数开源思想命名规则:my_address 
          Ø 避免随便命名 
        III.3 字段类型选择 
        字段类型的选择的一般原则: 
          Ø 根据需求选择合适的字段类型,在满足需求的情况下字段类型尽可能小。 
          Ø 只分配满足需求的最小字符数,不要太慷慨。 原因:更小的字段类型更小的字符数占用更少的内存,占用更少的磁盘空间,占用更少的磁盘IO,以及占用更少的带宽。 
        对于varchar和char的选择要根据引擎和具体情况的不同来选择,主要依据如下原则: 
          1.如果列数据项的大小一致或者相差不大,则使用char。 
          2.如果列数据项的大小差异相当大,则使用varchar。 
          3.对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间。 
          4.对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个标头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利。 
          5.表中只要存在一个varchar类型的字段,那么所有的char字段都会自动变成varchar类型,因此建议定长和变长的数据分开。 
    4 编码选择 
          单字节 latin1 
          多字节 utf8(汉字占3个字节,英文字母占用一个字节)如果含有中文字符的话最好都统一采用utf8类型,避免乱码的情况发生。 
    5 主键选择原则 
        注:这里说的主键设计主要是针对INNODB引擎 
          1.能唯一的表示行。 
          2.显式的定义一个数值类型自增字段的主键,这个字段可以仅用于做主键,不做其他用途。 
          3.MySQL主键应该是单列的,以便提高连接和筛选操作的效率。 
          4.主键字段类型尽可能小,能用SMALLINT就不用INT,能用INT就不用BIGINT。 
          5.尽量保证不对主键字段进行更新修改,防止主键字段发生变化,引发数据存储碎片,降低IO性能。 
          6.MySQL主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。 
          7.MySQL主键应当有计算机自动生成。 
          8.主键字段放在数据表的第一顺序。 
        推荐采用数值类型做主键并采用auto_increment属性让其自动增长。 
    6 其他需要注意的地方 
          Ø NULL OR NOT NULL 
          尽可能设置每个字段为NOT NULL,除非有特殊的需求,原因如下: 
            1.使用含有NULL列做索引的话会占用更多的磁盘空间,因为索引NULL列需要而外的空间来保存。 
            2.进行比较的时候,程序会更复杂。 
            3.含有NULL的列比较特殊,SQL难优化,如果是一个组合索引,那么这个NULL 类型的字段会极大影响整个索引的效率。 
          Ø 索引 
            索引的优点:极大地加速了查询,减少扫描和锁定的数据行数。 
            索引的缺点:占用磁盘空间,减慢了数据更新速度,增加了磁盘IO。 
          添加索引有如下原则: 
            1 选择唯一性索引。 
            2.为经常需要排序、分组和联合操作的字段建立索引。 
            3.为常作为查询条件的字段建立索引。 
            4.限制索引的数据,索引不是越多越好。 
            5.尽量使用数据量少的索引,对于大字段可以考虑前缀索引。 
            6.删除不再使用或者很少使用的索引。 
            7.结合核心SQL优先考虑覆盖索引。 
            8.忌用字符串做主键。 
          Ø 反范式设计 
          适当的使用冗余的反范式设计,以空间换时间有的时候会很高效。 
      IV Mysql软件优化 
        Ø 开启mysql复制,实现读写分离、负载均衡,将读的负载分摊到多个从服务器上,提高服务器的处理能力。 
        Ø 使用推荐的GA版本,提升性能 
        Ø 利用分区新功能进行大数据的数据拆分 
      V Mysql配置优化 
      注意:全局参数一经设置,随服务器启动预占用资源。 
        Ø key_buffer_size参数 
        mysql索引缓冲,如果是采用myisam的话要重点设置这个参数,根据(key_reads/key_read_requests)判断 
        Ø innodb_buffer_pool_size参数 
        INNODB 数据、索引、日志缓冲最重要的引擎参数,根据(hit riatos和FILE I/O)判断 
        Ø wait_time_out参数 
        线程连接的超时时间,尽量不要设置很大,推荐10s 
        Ø max_connections参数 
        服务器允许的最大连接数,尽量不要设置太大,因为设置太大的话容易导致内存溢出 
        Ø thread_concurrency参数 
        线程并发利用数量,(cpu+disk)*2,根据(os中显示的请求队列和tickets)判断 
        Ø sort_buffer_size参数 
        获得更快的–ORDER BY,GROUP BY,SELECT DISTINCT,UNION DISTINCT 
        Ø read_rnd_buffer_size参数 
        当根据键进行分类操作时获得更快的–ORDER BY 
        Ø join_buffer_size参数 
        join连接使用全表扫描连接的缓冲大小,根据select_full_join判断 
        Ø read_buffer_size参数 
        全表扫描时为查询预留的缓冲大小,根据select_scan判断 
        Ø tmp_table_size参数 
        临时内存表的设置,如果超过设置就会转化成磁盘表,根据参数(created_tmp_disk_tables)判断 
        Ø innodb_log_file_size参数(默认5M) 
        记录INNODB引擎的redo log文件,设置较大的值意味着较长的恢复时间。 
        Ø innodb_flush_method参数(默认fdatasync) 
        Linux系统可以使用O_DIRECT处理数据文件,避免OS级别的cache,O_DIRECT模式提高数据文件和日志文件的IO提交性能 
        Ø innodb_flush_log_at_trx_commit(默认1) 
          1.0表示每秒进行一次log写入cache,并flush log到磁盘。 
          2.1表示在每次事务提交后执行log写入cache,并flush log到磁盘。 
        3.2表示在每次事务提交后,执行log数据写入到cache,每秒执行一次flush log到磁盘。 
    7.Mysql语句级优化 
        1.性能查的读语句,在innodb中统计行数,建议另外弄一张统计表,采用myisam,定期做统计.一般的对统计的数据不会要求太精准的情况下适用。 
        2.尽量不要在数据库中做运算。 
        3.避免负向查询和%前缀模糊查询。 
        4.不在索引列做运算或者使用函数。 
        5.不要在生产环境程序中使用select * from 的形式查询数据。只查询需要使用的列。 
        6.查询尽可能使用limit减少返回的行数,减少数据传输时间和带宽浪费。 
        7.where子句尽可能对查询列使用函数,因为对查询列使用函数用不到索引。 
        8.避免隐式类型转换,例如字符型一定要用’’,数字型一定不要使用’’。 
        9.所有的SQL关键词用大写,养成良好的习惯,避免SQL语句重复编译造成系统资源的浪费。 
        10.联表查询的时候,记得把小结果集放在前面,遵循小结果集驱动大结果集的原则。 
        11.开启慢查询,定期用explain优化慢查询中的SQL语句。

 

 

 

简单叙述一下MYSQL的优化

  1. 数据库的设计:尽量把数据库设计的更小的占磁盘空间. 
        1) 尽可能使用更小的整数类型.(mediumint就比int更合适). 
        2) 尽可能的定义字段为not null,除非这个字段需要null. 
        3) 如果没有用到变长字段的话比如varchar,那就采用固定大小的纪录格式比如char. 
        4) 表的主索引应该尽可能的短.这样的话每条纪录都有名字标志且更高效. 
        5) 只创建确实需要的索引。索引有利于检索记录,但是不利于快速保存记录。如果总是要在表的组合字段上做搜索,那么就在这些字段上创建索引。索引的第一部分必须是最常使用的字段.如果总是需要用到很多字段,首先就应该多复制这些字段,使索引更好的压缩。 
        6) 所有数据都得在保存到数据库前进行处理。 
        7) 所有字段都得有默认值。 
        8) 在某些情况下,把一个频繁扫描的表分成两个速度会快好多。在对动态格式表扫描以取得相关记录时,它可能使用更小的静态格式表的情况下更是如此。 
      2.系统的用途 
        1) 尽量使用长连接. 
        2) explain复杂的SQL语句。 
        3) 如果两个关联表要做比较话,做比较的字段必须类型和长度都一致. 
        4) LIMIT语句尽量要跟order by或者 distinct.这样可以避免做一次full table scan. 
        5) 如果想要清空表的所有纪录,建议用truncate table tablename而不是delete from tablename. 
        6) 能使用STORE PROCEDURE 或者 USER FUNCTION的时候. 
        7) 在一条insert语句中采用多重纪录插入格式.而且使用load data infile来导入大量数据,这比单纯的insert快好多. 
        8) 经常OPTIMIZE TABLE 来整理碎片. 
        9) 还有就是date 类型的数据如果频繁要做比较的话尽量保存在unsigned int 类型比较快。 
      3.系统的瓶颈 
        1) 磁盘搜索。并行搜索,把数据分开存放到多个磁盘中,这样能加快搜索时间. 
        2) 磁盘读写(IO)。可以从多个媒介中并行的读取数据。 
        3) CPU周期。数据存放在主内存中.这样就得增加CPU的个数来处理这些数据。 
        4) 内存带宽。当CPU要将更多的数据存放到CPU的缓存中来的话,内存的带宽就成了瓶颈.

 

 

Sql优化总结

  1. 表结构
    1. 能用int不要用varchar
    2. 能用varchar不要用char
  1. 索引方面
    1. 尽量在where order by字段上面添加索引
    2. 数量少,经常修改操作,数据重复且分布均匀的字段少见序列
  1. sql方面
    1. 不要对列进行计算操作
    2. 能用exists不要用in
    3. 能用union all不要用!=或者>a <=a
    4. 能用=0不要用is null
    5. 尽量不要让函数开启全表扫描
  1. 数据使用
    1. 尽量返回前端必须字段
  1. 数据库安装
    1. 使用rpm方式安装,执行效率更高
    2. Explain和开启慢查询
  1. 其他
    1. 集群,负载,主从,分库,分表,分片
    2. 硬件支持,多核,大内存
    3. 修改my.cnf配置文件

 

 

 

为什么要离职?

正面:

其实呢,我是一个比较安逸的人,不喜欢频繁的变动,在公司和领导同事关系非常融洽,在公司也学到了很多很多的东西,不过在职业前景方面,学习的机会比较少,很难提高自己的能力所以不得已才提出离职。

 

 

自我介绍一下:

我叫xx,河北邯郸人,来自于xxxx科技有限公司,平时喜欢研究各种技术,

技术发展方向是全栈工程师,因为个人不喜欢拒绝别人,面对技术同样,所以

希望别人问自己的技术问题,都能够尽自己所能予以解决,现在主要研究的是服务器方面运维的部分知识

 

 

猜你喜欢

转载自blog.csdn.net/AinUser/article/details/81274561