Sublime Mac快捷键

打开/前往

快捷键 说明
⌘ T 前往文件
⌘ ⌃ P 前往项目
⌘ R 前往 method
⌘ ⇧ P 命令提示
⌃ G 前往行
⌘ K B 开关侧栏
⌃ ` python 控制台
⌘ ⇧ N 新建窗口

编辑

快捷键 说明
⌃ ⇧ M 选择括号内的内容
⌘ ⇧ ↩ 在当前行前插入新行
⌘ ↩ 在当前行后插入新行
⌃ ⇧ K 删除行
⌘ K K 从光标处删除至行尾
⌘ K ⌫ 从光标处删除至行首
⌘ ⇧ D 复制(多)行
⌘ J 合并(多)行
⌘ K U 改为大写
⌘ K L 改为小写
⌘ / 注释
⌘ ⌥ / 块注释
⌘ Y 恢复或重复
⌘ ⇧ V 粘贴并自动缩进
⌃ space 自动完成(重复按下选择下一个提示)
⌃ M 跳转至对应的括号
⌘ U 软撤销(可撤销光标移动)
⌘ ⇧ U 软重做(可重做光标移动)

XML

快捷键 说明
⌘⇧A 选择标签内的内容
⌘⌥ . 闭合当前标签

查找/替换

快捷键 说明
⌘ F 查找
⌘ ⌥ F 替换
⌘ ⌥ G 查找下一个符合当前所选的内容
⌘ ⌃ G 查找所有符合当前所选的内容进行多重编辑
⌘ ⇧ F 在所有打开的文件中进行查找
⌘ L 选择行 (重复按下将下一行加入选择)
⌘ D 选择词 (重复按下时多重选择相同的词进行多重编辑)
⌘ ⇧ L 鼠标选中多行按下该命令,即可同时编辑这些行
⌘ 鼠标左键双击 可以手动选择同时要编辑的多处文本
⌘ D,⌘ K, ⌘ D 跳过选取
⌘ ⇧ Space 扩展选取

拆分窗口/标签页

快捷键 说明
⌘ ⌥ 1 单列
⌘ ⌥ 2 双列
⌘ ⌥ 5 网格 (4组)
⌃ [1,2,3,4] 焦点移动至相应组
⌃ ⇧ [1,2,3,4] 将当前文件移动至相应组
⌘ [1,2,3…] 选择相应标签页

书签

快捷键 说明
⌘ F2 添加/去除书签
F2 下一个书签
⇧ F2 前一个书签
⌘ ⇧ F2 清除书签

标记

快捷键 说明
⌘ K space 设置标记
⌘ K W 从光标位置删除至标记
⌘ K A 从光标位置选择至标记
⌘ K G 清除标记

IDEA Mac快捷键

IDEA Mac快捷键

智能提示

符号 标识
command
shift
option
control
上箭头
下箭头
左箭头
右箭头
↩︎ Return
Delete
Tab
反Tab

基本

快捷键 说明
向前删除 Fn Delete
Page Up(Fn ↑)
Page Down(Fn ↓)
Home Fn ←
End Fn →

编辑

快捷键 说明
⌘ F 在当前窗口查找
⌘ ⇧ F 在全工程查找
⌘ Space 基本的代码不全(补全任何类、方法、变量)
⌘ ⇧ Space 智能代码补全(过滤器方法列表和变量的预期类型)
⌘ ⇧ ↩︎ 自动结束代码,行末自动添加分号
⌘ P 显示方法的参数信息
⌃ J 快速查看文档
⇧ F1 查看外部文档(在某些代码上会触发打开浏览器显示相关文档)
⌘ 鼠标放在代码上 显示代码简要信息
⌘ F1 在错误或警告处显示具体描述信息
⌘ N 生成代码(getter、setter、构造函数、hashCode/equals,toString)
⌃ O 覆盖方法(重写父类方法)
⌃ I 实现方法(实现接口中的方法)
⌘ ⌥ T 包围代码(使用if..else, try..catch, for, synchronized等包围选中的代码)
⌘ / 注释/取消注释与行注释
⌘ ⌥ / 注释/取消注释与块注释
⌥ ↑ 连续选中代码块
⌥ ↓ 减少当前选中的代码块
⌃ ⇧ Q 显示上下文信息
⌥ ↩ 显示意向动作和快速修复代码
⌘ ⌥ L 格式化代码
⌃ ⌥ O 优化import
⌃ ⌥ I 自动缩进线
⇥ / ⇧ ⇥ 缩进代码 / 反缩进代码
⌘ ⇧ V 从最近的缓冲区粘贴
⌘ D 复制当前行或选定的块
⌘ ⌫ 删除当前行或选定的块的行
⇧ ↩ 开始新的一行
⌘ ⇧ U 大小写切换
⌘ ⇧ ] / ⌘ ⇧ [ 选择直到代码块结束/开始
⌥ ⌦ 删除到单词的末尾(⌦键为Fn+Delete)
⌥ ⌫ 删除到单词的开头
⌘ + / ⌘ – 展开 / 折叠代码块
⌘ ⇧ + 展开所以代码块
⌘ ⇧ – 折叠所有代码块
⌘ W 关闭活动的编辑器选项卡

查询/替换 Search/Replace

快捷键 说明
Double ⇧ 查询任何东西
⌘ F 文件内查找
⌘ G 查找模式下,向下查找
⌘ ⇧ G 查找模式下,向上查找
⌘ R 文件内替换
⌘ ⇧ F 全局查找(根据路径)
⌘ ⇧ R 全局替换(根据路径)
⌘ ⇧ S 查询结构(UltimateEdition版专用,需要在Keymap中设置)
⌘ ⇧ M 替换结构(UltimateEdition版专用,需要在Keymap中设置)

使用查询

快捷键 说明
⌥ F7 / ⌘ F7 在文件中查找用法/在类中查找用法
⌘ ⇧ F7 在文件中突出显示的用法
⌘ ⌥ F7 显示用法

编译和运行

快捷键 说明
⌘ F9 编译Project
⌘ ⇧ F9 编译选择的文件、包或模块
⌃ ⌥ R 弹出Run的可选择菜单
⌃ ⌥ D 弹出Debug的可选择菜单
⌃ R 运行
⌃ D 调试
⌃ ⇧ R,⌃ ⇧ D 从编辑器运行上下文环境配置

调试Debugging

快捷键 说明
F8 进入下一步,如果当前行断点是一个方法,则不进入当前方法体内
F7 进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果该方法体还有方法,则不会进入该内嵌的方法中
⇧ F7 智能步入,断点所在行上有多个方法调用,会弹出进入哪个方法
⇧ F8 跳出
⌥ F9 运行到光标处,如果光标前有其他断点会进入到该断点
⌥ F8 计算表达式(可以更改变量值使其生效)
⌘ ⌥ R 恢复程序运行,如果该断点下面代码还有断点则停在下一个断点上
⌘ F8 切换断点(若光标当前行有断点则取消断点,没有则加上断点)
⌘ ⇧ F8 查看断点信息

导航Navigation

快捷键 说明
⌘ O 查找类文件
⌘ ⇧ O 查找所有类型文件、打开文件、打开目录,打开目录需要在输入的内容前面或后面加一个反斜杠/
⌘ ⌥ O 前往指定的变量 / 方法
F12 返回到前一个工具窗口
⌘ ⇧ F4 关闭活动run/messages/find/… tab
⌘ L 在当前文件跳转到某一行的指定处
⌘ E 显示最近打开的文件记录列表
⌘ ⌥ ← / ⌘ ⌥ → 退回 / 前进到上一个操作的地方
⌘ ⇧ ⌫ 跳转到最后一个编辑的地方
⌥ F1 显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择(如在代码编辑窗口可以选择显示该文件的Finder)
⌘ B / ⌘ 鼠标点击 进入光标所在的方法/变量的接口或是定义处
⌘ ⌥ B 跳转到实现处,在某个调用的方法名上使用会跳到具体的实现处,可以跳过接口
⌃ ⇧ B 跳转到类型声明处
⌘ U 前往当前光标所在方法的父类的方法 / 接口定义
⌘ F12 弹出当前文件结构层,可以在弹出的层上直接输入进行筛选(可用于搜索类中的方法)
⌃ H 显示当前类的层次结构
⌘ ⇧ H 显示方法层次结构
⌃ ⌥ H 显示调用层次结构
F2 / ⇧ F2 跳转到下一个/上一个突出错误或警告的位置
F4 / ⌘ ↓ 编辑/查看代码源
F3 选中文件/文件夹/代码行,添加/取消书签
⌥ F3 选中文件/文件夹/代码行,使用助记符添加/取消书签
⌃ 0 …⌃ 9 定位到对应数值的书签位置
⌘ F3 显示所有书签

重构Refactoring

快捷键 说明
F5 复制文件到指定目录
F6 移动文件到指定目录
⌘ ⌫ 在文件上为安全删除文件,弹出确认框
⇧ F6 重命名文件
⌘ F6 更改签名
⌘ ⌥ N 一致性
⌘ ⌥ M 将选中的代码提取为方法
⌘ ⌥ V 提取变量
⌘ ⌥ F 提取字段
⌘ ⌥ C 提取常量
⌘ ⌥ P 提取参数

通用General

快捷键 说明
⌘ ⌥ Y 同步、刷新
⌃ ⌘ F 切换全屏模式
⌘ ⇧ F12 切换最大化编辑器
⌥ ⇧ I 检查当前文件与当前的配置文件
⌘ , 打开IDEA系统设置
⌘ ; 打开项目结构对话框
⇧ ⌘ A 查找动作(可设置相关选项)
⌃ ⇥ 编辑窗口标签和工具窗口之间切换(如果在切换的过程加按上delete,则是关闭对应选中的窗口)

Nginx配置清单详解

Nginx配置清单详解

概述

Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性。

Nginx配置文件的整体结构

从图中可以看出主要包含以下几大部分内容:

1.全局块

该部分配置主要影响Nginx全局,通常包括下面几个部分:

  • 配置运行Nginx服务器用户(组)
  • worker process数
  • Nginx进程PID存放路径
  • 错误日志的存放路径
  • 配置文件的引入

2.events块

该部分配置主要影响Nginx服务器与用户的网络连接,主要包括:

  • 设置网络连接的序列化
  • 是否允许同时接收多个网络连接
  • 事件驱动模型的选择
  • 最大连接数的配置

3.http块

  • 定义MIMI-Type
  • 自定义服务日志
  • 允许sendfile方式传输文件
  • 连接超时时间
  • 单连接请求数上限

4.Server块

  • 配置网络监听
  • 基于名称的虚拟主机配置
  • 基于IP的虚拟主机配置

5.location块

location配置

  • 请求根目录配置
  • 更改location的URI
  • 网站默认首页配置

一份配置清单例析

配置代码如下:

user  nobody  nobody;

worker_processes  3;

error_log  logs/error.log;

pid  logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
}

http {
    include   mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    sendfile  on;
    keepalive_timeout  65;

    server {
        listen       8088;
        server_name  codesheep;
        access_log  /codesheep/webserver/server1/log/access.log;
        error_page  404    /404.html;

        location /server1/location1 {
            root   /codesheep/webserver;
            index  index.server2-location1.htm;
        }

        location /server1/location2 {
            root   /codesheep/webserver;
            index  index.server2-location2.htm;
        }
    }


    server {
        listen       8089;
        server_name  192.168.31.177;
        access_log   /codesheep/webserver/server2/log/access.log;
        error_page  404    /404.html;

        location /server2/location1 {
            root   /codesheep/webserver;
            index  index.server2-location1.htm;
        }

        location /srv2/loc2 {
            alias /codesheep/webserver/server2/location2/;
            index  index.server2-location2.htm;
        }

        location =/404.html{
            root /codesheep/webserver/;
            index 404.html;
        }
    }
}

接下来就来详细剖析以下配置文件中各个指令的含义

配置运行Nginx服务器用户(组)

指令格式: user user[group];

  • user:指定可以运行Nginx服务器的用户
  • group:可选项,可以运行Nginx服务器的用户组

如果user指令不配置或者配置为 user nobody nobody ,则默认所有用户都可以启动Nginx进程

worker process数配置

Nginx服务器实现并发处理服务的关键,指令格式: worker_processes number|auto;

  • number:Nginx进程最多可以产生的worker process数
  • auto:Nginx进程将自动检测

按照上文中的配置清单的实验,我们给worker_processes配置的数目是:3,启动Nginx服务器后,我们可以后台看一下主机上的Nginx进程情况:

ps -aux | grep nginx

很明显,理解 worker_processes 这个指令的含义就很容易了

Nginx进程PID存放路径

Nginx进程是作为系统守护进程在运行,需要在某文件中保存当前运行程序的主进程号,Nginx支持该保存文件路径的自定义

指令格式: pid file;

  • file:指定存放路径和文件名称

如果不指定默认置于路径 logs/nginx.pid

错误日志的存放路径

指定格式: error_log file|stderr;

  • file:日志输出到某个文件file
  • stderr:日志输出到标准错误输出

配置文件的引入

指令格式: include file;

该指令主要用于将其他的Nginx配置或者第三方模块的配置引用到当前的主配置文件中

设置网络连接的序列化

指令格式: accept_mutex on|off;

  • 该指令默认为on状态,表示会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢。

说到该指令,首先得阐述一下什么是所谓的 “惊群问题”,可以参考 WIKI百科的解释。就Nginx的场景来解释的话大致的意思就是:当一个新网络连接来到时,多个worker进程会被同时唤醒,但仅仅只有一个进程可以真正获得连接并处理之。如果每次唤醒的进程数目过多的话,其实是会影响一部分性能的。

所以在这里,如果acceptmutex on,那么多个worker将是以串行方式来处理,其中有一个worker会被唤醒;反之若acceptmutex off,那么所有的worker都会被唤醒,不过只有一个worker能获取新连接,其它的worker会重新进入休眠状态

这个值的开关与否其实是要和具体场景挂钩的。

是否允许同时接收多个网络连接

指令格式: multi_accept on|off;

  • 该指令默认为off状态,意指每个worker process 一次只能接收一个新到达的网络连接。若想让每个Nginx的worker process都有能力同时接收多个网络连接,则需要开启此配置

事件驱动模型的选择

指令格式: usemodel;

  • model模型可选择项包括:select、poll、kqueue、epoll、rtsig等……

最大连接数的配置

指令格式: worker_connections number;

  • number默认值为512,表示允许每一个worker process可以同时开启的最大连接数

定义MIME-Type

指令格式

include mime.types;
default_type mime-type;
  • MIME-Type指的是网络资源的媒体类型,也即前端请求的资源类型
  • include指令将mime.types文件包含进来

cat mime.types 来查看mime.types文件内容,我们发现其就是一个types结构,里面包含了各种浏览器能够识别的MIME类型以及对应类型的文件后缀名字,如下所示:

自定义服务日志

指令格式:access_log path [format];

  • path:自定义服务日志的路径 + 名称
  • format:可选项,自定义服务日志的字符串格式。其也可以使用 log_format 定义的格式

允许sendfile方式传输文件

指令格式:

sendfile on | off;
sendfile_max_chunk size;
  • 前者用于开启或关闭使用sendfile()传输文件,默认off
  • 后者指令若size>0,则Nginx进程的每个worker process每次调用sendfile()传输的数据了最大不能超出此值;若size=0则表示不限制。默认值为0

连接超时时间配置

指令格式: keepalive_timeout timeout[header_timeout];

  • timeout 表示server端对连接的保持时间,默认75秒
  • headertimeout 为可选项,表示在应答报文头部的 Keep-Alive 域设置超时时间:“Keep-Alive : timeout = headertimeout”

单连接请求数上限

指令格式: keepalive_requests number;

  • 该指令用于限制用户通过某一个连接向Nginx服务器发起请求的次数

配置网络监听

指令格式

  • 第一种:配置监听的IP地址: listen IP[:PORT];
  • 第二种:配置监听的端口: listen PORT;

实际举例:

listen 192.168.31.177:8080;  # 监听具体IP和具体端口上的连接
listen 192.168.31.177;       # 监听IP上所有端口上的连接
listen 8080;                 # 监听具体端口上的所有IP的连接

基于名称和IP的虚拟主机配置

指令格式: server_name name1 name2…

  • name可以有多个并列名称,而且此处的name支持正则表达式书写

实际举例:

server_name ~^www\d+\.myserver\.com$;

此时表示该虚拟主机可以接收类似域名 www1.myserver.com 等的请求而拒绝 www.myserver.com 的域名请求,所以说用正则表达式可以实现更精准的控制

至于基于IP的虚拟主机配置比较简单,不再太赘述:

指令格式: server_name IP地址

location配置

指令格式: location[=|~|~*|^~]uri{…}

  • 这里的uri分为标准uri和正则uri,两者的唯一区别是uri中是否包含正则表达式

uri前面的方括号中的内容是可选项,解释如下:

  • “=”:用于标准uri前,要求请求字符串与uri严格匹配,一旦匹配成功则停止
  • “~”:用于正则uri前,并且区分大小写
  • “~*”:用于正则uri前,但不区分大小写
  • “^~”:用于标准uri前,要求Nginx找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配

请求根目录配置

指令格式: root path;

  • path:Nginx接收到请求以后查找资源的根目录路径

当然,还可以通过alias指令来更改location接收到的URI请求路径,指令为:

alias path;   # path为修改后的根路径 

设置网站的默认首页

指令格式: index file……

  • file可以包含多个用空格隔开的文件名,首先找到哪个页面,就使用哪个页面响应请求

Java面试宝典总结

Java基础部分

1.一个“.java”源文件是否可以包括多个类(内部类),有什么限制?

可以有多个类,但只能有一个public类,并且public的类名必须与文件名相一致。

2.&与&&的区别

&与&&都可以用作逻辑与的运算符,表示逻辑与and,当运算符两边的表达式都为true时,整个运算的结果才为true,否则只要一方为false,则结果为false。

&&有短路功能,即如果第一个表达式为false,则不计算第二个表达式。

当&操作符两边的表达式不是boolean类型时,&表示按位与操作,&通常使用0x0f来与一个整数进行&操作,来获取整数的最低4个bit位。

3.在Java中如何跳出当前的多层嵌套循环

让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找某个数字。

int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
boolean found = false;
for(int i = 0; i < arr.length && !found; i++ ){
    for(int j = 0; j < arr[i].length; j++){
        System.out.println("i = " + i + ", j = " + j);
        if(arr[i][j] = 5){
            found = true;
            break;
        }
    }
}

4.short s1 = 1,其中s1 = s1 + 1与 s1 += 1

对于short s1 = 1; s1 = s1 + 1;由于s1 + 1运算时会自动提升表达式的类型,所以结果是int型,在复制给short类型时,编译器将报告需要强制转换类型的错误。对于s1 += 1;由于+=是Java语言规定的运算符,Java编译器会对它进行特殊处理,因此可以正常编译。

5.char类型能不能存储一个中文汉字

char型变量是用来存储Unicode编码的字符串,Unicode编码字符集中包含了汉字,所以char型变量中可以存储汉字,不过如果某个特殊汉字没有被包含在Unicode编码字符集中,那么这个char型变量就不能存储这个特殊汉字。补充说明:Unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

6.用最有效率的方法算出2乘以8等于多少

2 << 3;位运算,因为将一个数左移n位,就相当于乘以了2的n次方

7.设计一个一百亿的计算器