Idea For Mac *全快捷键整理

一、Mac键盘符号和修饰键说明

  1. ⌘ Command
  2. ⇧Shift
  3. Option
  4. ⌃ Control
  5. ↩︎ Return/Enter
  6. ⌫ Delete
  7. ⌦ 向前删除键(Fn+Delete)
  8. ↑ 上箭头
  9. ↓ 下箭头
  10. ← 左箭头
  11. → 右箭头
  12. ⇞ Page Up(Fn+↑)
  13. ⇟ Page Down(Fn+↓)
  14. Home Fn + ←
  15. End Fn + →
  16. ⇥ 右制表符(Tab键)
  17. ⇤ 左制表符(Shift+Tab)
  18. ⎋ Escape (Esc)

二、Editing(编辑)

  1. ⌃Space 基本的代码补全(补全任何类、方法、变量)
  2. ⌃⇧Space 智能代码补全(过滤器方法列表和变量的预期类型)
  3. ⌘⇧↩ 自动结束代码,行末自动添加分号
  4. ⌘P 显示方法的参数信息
  5. ⌃J, Mid. button click 快速查看文档
  6. ⇧F1 查看外部文档(在某些代码上会触发打开浏览器显示相关文档)
  7. ⌘+鼠标放在代码上 显示代码简要信息
  8. ⌘F1 在错误或警告处显示具体描述信息
  9. ⌘N, ⌃↩, ⌃N 生成代码(getter、setter、构造函数、hashCode/equals,toString)
  10. ⌃O 覆盖方法(重写父类方法)
  11. ⌃I 实现方法(实现接口中的方法)
  12. ⌘⌥T 包围代码(使用if..else, try..catch, for, synchronized等包围选中的代码)
  13. / 注释/取消注释与行注释
  14. ⌘⌥/ 注释/取消注释与块注释
  15. ⌥↑ 连续选中代码块
  16. ⌥↓ 减少当前选中的代码块
  17. ⌃⇧Q 显示上下文信息
  18. ⌥↩ 显示意向动作和快速修复代码
  19. ⌘⌥L 格式化代码
  20. ⌃⌥O 优化import
  21. ⌃⌥I 自动缩进线
  22. / ⇧⇥ 缩进代码 / 反缩进代码
  23. ⌘X 剪切当前行或选定的块到剪贴板
  24. ⌘C 复制当前行或选定的块到剪贴板
  25. ⌘V 从剪贴板粘贴
  26. ⌘⇧V 从*近的缓冲区粘贴
  27. ⌘D 复制当前行或选定的块
  28. ⌘⌫ 删除当前行或选定的块的行
  29. ⌃⇧J 智能的将代码拼接成一行
  30. ⌘↩ 智能的拆分拼接的行
  31. ⇧↩ 开始新的一行
  32. ⌘⇧U 大小写切换
  33. ⌘⇧] / ⌘⇧[ 选择直到代码块结束/开始
  34. ⌥⌦ 删除到单词的末尾(⌦键为Fn+Delete)
  35. ⌥⌫ 删除到单词的开头
  36. ⌘+ / ⌘- 展开 / 折叠代码块
  37. ⌘⇧+ 展开所以代码块
  38. ⌘⇧- 折叠所有代码块
  39. ⌘W 关闭活动的编辑器选项卡

三、Search/Replace(查询/替换)

  1. Double ⇧ 查询任何东西
  2. F 文件内查找
  3. ⌘G 查找模式下,向下查找
  4. ⌘⇧G 查找模式下,向上查找
  5. ⌘R 文件内替换
  6. ⌘⇧F 全局查找(根据路径)
  7. ⌘⇧R 全局替换(根据路径)
  8. ⌘⇧S 查询结构(Ultimate Edition 版专用,需要在Keymap中设置)
  9. ⌘⇧M 替换结构(Ultimate Edition 版专用,需要在Keymap中设置)

四、Usage Search(使用查询)

  1. ⌥F7 / ⌘F7 在文件中查找用法 / 在类中查找用法
  2. ⌘⇧F7 在文件中突出显示的用法
  3. ⌘⌥F7 显示用法
  4. ⌘⇧I 查看定义的类,快速查看

五、Compile and Run(编译和运行)

  1. ⌘F9 编译Project
  2. ⌘⇧F9 编译选择的文件、包或模块
  3. ⌃⌥R 弹出 Run 的可选择菜单
  4. ⌃⌥D 弹出 Debug 的可选择菜单
  5. ⌃R 运行
  6. ⌃D 调试
  7. ⌃⇧R, ⌃⇧D 从编辑器运行上下文环境配置

六、Debugging(调试)

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

七、Navigation(导航)

  1. ⌘O 查找类文件
  2. ⌘⇧O 查找所有类型文件、打开文件、打开目录,打开目录需要在输入的内容前面或后面加一个反斜杠/
  3. ⌘⌥O 前往指定的变量 / 方法
  4. ⌃← / ⌃→ 左右切换打开的编辑tab页
  5. F12 返回到前一个工具窗口
  6. ⎋ 从工具窗口进入代码文件窗口
  7. ⇧⎋ 隐藏当前或*后一个活动的窗口,且光标进入代码文件窗口
  8. ⌘⇧F4 关闭活动run/messages/find/… tab
  9. ⌘L 在当前文件跳转到某一行的指定处
  10. ⌘E 显示*近打开的文件记录列表
  11. ⌘⌥← / ⌘⌥→ 退回 / 前进到上一个操作的地方
  12. ⌘⇧⌫ 跳转到*后一个编辑的地方
  13. ⌥F1 显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择(如在代码编辑窗口可以选择显示该文件的Finder)
  14. ⌘B / ⌘ 鼠标点击 进入光标所在的方法/变量的接口或是定义处
  15. ⌘⌥B 跳转到实现处,在某个调用的方法名上使用会跳到具体的实现处,可以跳过接口
  16. ⌥ Space, ⌘Y 快速打开光标所在方法、类的定义
  17. ⌃⇧B 跳转到类型声明处
  18. ⌘U 前往当前光标所在方法的父类的方法 / 接口定义
  19. ⌃↓ / ⌃↑ 当前光标跳转到当前文件的前一个/后一个方法名位置
  20. ⌘] / ⌘[ 移动光标到当前所在代码的花括号开始/结束位置
  21. ⌘F12 弹出当前文件结构层,可以在弹出的层上直接输入进行筛选(可用于搜索类中的方法)
  22. ⌃H 显示当前类的层次结构
  23. ⌘⇧H 显示方法层次结构
  24. ⌃⌥H 显示调用层次结构
  25. F2 / ⇧F2 跳转到下一个/上一个突出错误或警告的位置
  26. F4 / ⌘↓ 编辑/查看代码源
  27. ⌥ Home 显示到当前文件的导航条
  28. F3选中文件/文件夹/代码行,添加/取消书签
  29. ⌥F3 选中文件/文件夹/代码行,使用助记符添加/取消书签
  30. 0...⌃9 定位到对应数值的书签位置
  31. ⌘F3 显示所有书签

八、Refactoring(重构)

  1. F5 复制文件到指定目录
  2. F6 移动文件到指定目录
  3. ⌘⌫ 在文件上为安全删除文件,弹出确认框
  4. ⇧F6 重命名文件
  5. ⌘F6 更改签名
  6. ⌘⌥N 一致性
  7. ⌘⌥M 将选中的代码提取为方法
  8. ⌘⌥V 提取变量
  9. ⌘⌥F 提取字段
  10. ⌘⌥C 提取常量
  11. ⌘⌥P 提取参数

九、VCS/Local History(版本控制/本地历史记录)

  1. ⌘K 提交代码到版本控制器
  2. T 从版本控制器更新代码
  3. ⌥⇧C 查看*近的变更记录
  4. ⌃C 快速弹出版本控制器操作面板

十、Live Templates(动态代码模板)

  1. ⌘⌥J 弹出模板选择窗口,将选定的代码使用动态模板包住
  2. ⌘J 插入自定义动态代码模板

十一、General(通用)

  1. 1...⌘9 打开相应编号的工具窗口
  2. ⌘S 保存所有
  3. ⌘⌥Y 同步、刷新
  4. ⌃⌘F 切换全屏模式
  5. ⌘⇧F12 切换*大化编辑器
  6. ⌥⇧F 添加到收藏夹
  7. ⌥⇧I 检查当前文件与当前的配置文件
  8. §⌃, ⌃` 快速切换当前的scheme(切换主题、代码样式等)
  9. ⌘, 打开IDEA系统设置
  10. ⌘; 打开项目结构对话框
  11. ⇧⌘A 查找动作(可设置相关选项)
  12. ⌃⇥ 编辑窗口标签和工具窗口之间切换(如果在切换的过程加按上delete,则是关闭对应选中的窗口)

241. 为运算表达式设计优先级(JS实现)

241. 为运算表达式设计优先级(JS实现)
1 题目
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, – 以及 * 。
示例 1:
输入: “2-1-1”
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
示例 2:
输入: “23-45”
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(45))) = -34
((23)-(45)) = -14
((2(3-4))5) = -10
(2((3-4)5)) = -10
(((23)-4)*5) = 10
链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses
2 思路
这道题主要用分治的思想来做,对于一个表达式,我们可以以其中一个运算符为分界,将其划分为两个子表达式,原表达式的计算结果就是这两个子表达式计算结果再进行运算而得到的,而这子表达式又可以进一步分割为两个表达式,如此递归下去,直至表达式不可分割,也就是只剩一个数字,所有的分割方法就是*后的答案
3代码
/**
 * @param {string} input
 * @return {number[]}
 */
var diffWaysToCompute = function(input) {
if (input.length === 0) return [];
  let num = parseInt(input);
  if (num == input) return [num];    //如果是数字,则不可分割
  let result = [];
  for (let i=1; i<input.length-1; i++) {
    if (parseInt(input[i]) == input[i]) continue;
    let nums1 = diffWaysToCompute(input.slice(0,i));    //以第i个运算字符,进行分割
    let nums2 = diffWaysToCompute(input.slice(i+1));
    let res;
    for (let num1 of nums1) {       //将所有子表达式的可能结果进行运算
      for (let num2 of nums2) {
        if (input[i] === ‘+’) {
          res = num1 + num2;
        } else if (input[i] === ‘-‘) {
          res = num1 – num2;
        } else {
          res = num1 * num2;
        }
        result.push(res);
      }
    }
  }
  return result;
};

258. 各位相加(JS实现)

258. 各位相加(JS实现)
1 题目
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
链接:https://leetcode-cn.com/problems/add-digits
2 思路
这道可以直接暴力循环,而数学上可以用自然数数根的概念进行解决
3代码
/**
 * @param {number} num
 * @return {number}
 */
var addDigits = function(num) {
return (num – 1) % 9 + 1;
};

260. 只出现一次的数字 III(JS实现)

260. 只出现一次的数字 III(JS实现)
1 题目
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
注意:
结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
链接:https://leetcode-cn.com/problems/single-number-iii
2 思路
这道用位运算很巧妙
计算 bitmask ^= x,则 bitmask 不会保留出现两次数字的值,因为相同数字的异或值为 0。
但是 bitmask 会保留只出现一次的两个数字(x 和 y)之间的差异,在通过 bitmask & (-bitmask) 保留 bitmask *右边的 1,这个1要么来自于x,要么来自于y,然后再通过一次遍历异或运算,得到其中一个数
3代码
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var singleNumber = function(nums) {
    let bitMask = 0;
    for (let num of nums) {
        bitMask ^= num;
    }
    let diff = bitMask & (-bitMask);
    let x = 0;
    for (let num of nums) {
        if (num & diff) {   //排除y
            x ^= num;
        }
    }
    return [x, bitMask^x];
};

263. 丑数(JS实现)

263. 丑数(JS实现)
1 题目
编写一个程序,找出第 n 个丑数。
丑数就是质因数只包含 2, 3, 5 的正整数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:
1 是丑数。
n 不超过1690。
链接:https://leetcode-cn.com/problems/ugly-number-ii
2 思路
这道题我们可以使用动态规划生成丑数,可以通过动态规划优化。
让我们从数组中只包含一个丑数数字 1 开始,使用三个指针p1, p2和 p3,标记所指向丑数要乘以的因子。算法很简单:在2*nums[p1]、3*nums[p2]、5*nums[p3]选出*小的丑数并添加到数组中。并将该丑数对应的因子指针往前走一步。重复该步骤直到计算完 1690 个丑数。
3代码
/**
 * @param {number} n
 * @return {number}
 */
var nthUglyNumber = function(n) {
    const res = [1];
    const map = {};
    let p1 = p2 = p3 = 0;
    while(res.length < n) {
        let num = Math.min(res[p1] * 2, res[p2] * 3, res[p3] * 5);
        if (!map[num]) {
            res.push(num);
            map[num] = true;
        }
        if (num === res[p1] * 2) {
            p1++;
        } else if (num === res[p2] * 3) {
            p2++;
        } else {
            p3++;
        }
    }
    return res[n-1];
};

IDEA快捷键-Mac

1、按住Command,点击相应类名/接口名:进入相关类所在文件

例如,按住Command后点击Collection,自动打开Collection.java文件

%title插图%num

2、按住Command+f,在当前文件打开字符串搜索功能

3、按住Command+O,查找类文件

4、按住Command+U,光标所在方法/变量的超类/接口文件(尝试失败,原因:?)

NYOJ 苹果

苹果

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 2
描述

ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱*大值。

 

输入

有多组测试数据,每组测试数据*行为2个正整数,分别代表苹果的个数n和背包的容量v,n、v同时为0时结束测试,此时不输出。接下来的n行,每行2个正整数,用空格隔开,分别代表苹果的大小c和价钱w。所有输入数字的范围大于等于0,小于等于1000。

输出

对每组测试数据输出一个整数,代表能放入背包的苹果的总价值。

样例输入

3 3
1 1
2 1
3 1
0 0

样例输出

2

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
int w[1005],v[1005],dp[1005];
int i,j;
int n,Max;
while(cin>>n>>Max)
{
if(!n && !Max)
{
break;
}
for(i=0;i<n;i++)
{
cin>>w[i]>>v[i];
}
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
for(j=Max;j>=w[i];j–)
{
if(dp[j]<dp[j-w[i]]+v[i])
{
dp[j]=dp[j-w[i]]+v[i];
}
}
}
cout<<dp[Max]<<endl;
}
return 0;
}

Idea Mac快捷键

Idea Mac快捷键
Idea中有许多快捷操作方式,本文将列出十分实用的几类操作,特别常见、不太实用或不太方便的操作可能没有写入。下面的操作方式都是在Mac OS X 10.5+的快捷键模式下使用的。

快捷键说明:
⌘:command
⇧:shift
⌥:option/alt
⌃: control/ctrl
文本编辑操作
快捷键 操作
double ⌥ 并按住不放+↑↓ 光标多行选中
⌥↑↓ 变量选择
⌘⇧⌥+鼠标左键拖拽 多行模式选中可编辑区域
⌥⇧鼠标左键拖拽 同时选中不同的多个区域
⌘⌫ 删除整行
⌥/ 根据本页内容补全词语
⌥⌘⇧↑↓ 左右移动在方法内的参数
⌥⇧⌘D 查看本地整个项目修改历史记录
⌘N 在project中创建新文件,在类中根据模板生成方法
⌥←→ 光标根据整个词汇左右移动
⌘⇧U 切换字符串大小写
⌘⇧⏎ 智能补全代码,如添加分号”;”,方法的”{}”
⇧⏎ 从当前行直接创建一个空行,并光标移到新的行
⌥⇧↑↓ 随意上下移动选择的行
⌘⇧↑↓ 在作用域内上下移动所选行
⌃I 创建父类接口应实现的方法
⌃O 创建父类可以重写的方法
⌘⇧8 切换当前文件多行模式
⌘⌥V 提取选择变量,作为局部变量
⌘⌥F 提取选择变量,作为成员变量
⌘⌥C 提取选择变量,作为静态常量
⌘⌥M 提取选择部分为方法
⌃↑↓ 光标按方法名跳转
F2 光标移动到高亮位置
⌘F 当前文件查询字符串
⌘R 当前文件替换字符串
⌘⇧F 全局查询字符串
⌘⇧R 全局替换字符串
⌘D 复制光标所在行,多选则复制所选内容
F3 mark代码
⌥F3 mark代码并标号
⇧⌘V 从粘贴板中粘贴
⌘J idea代码模板选择
代码Review操作
快捷键 操作
⌃⇧Q 查看代码上下文
F1 查看Document
⌃T 打开重构窗口
⌥⇧⌘U 打开UML图
⌘P 查看方法参数
⌘P之后,⌥↑↓ 切换重载方法
⌘⌥L 格式化代码
⌃⌥O 优化导入
⌥⏎ 智能提示
⌘B 在其他地方跳转到选择的类中,在本类中显示被调用的地方
⌃⇧P 查看表达式类型
全局操作
快捷键 操作
⇧鼠标滚轮 左右滑动
⌥F1 打开视图窗口选择
double ⌥ 打开检索(2018.3+版本整合所有类型检索)
⌃·(1左边的键) 打开idea视觉模式切换窗口
⌃⇥ 切换窗口或文件
⌘·(1左边的键) idea打开的项目间切换
⌘, 打开idea设置
⌘; 打开项目结构设置
double ⌃ 打开run anything窗口(version 2018.3+)
⌥⇧C 查看修改历史
⌘[ ] 后退或前进
⌘+数字1-9 打开各个数字对应的窗口
版本控制操作
快捷键 操作
⌘T 从版本库中拉取或更新代码
⌘K 提交代码(git中只是提交到本地,没有push)
文件跳转操作
快捷键 操作
⌘⌥←→ 跳转到前后编辑的位置
⌘⇧[ ] 按打开文件顺序切换

Linux ftp 自动上传备份文件脚本

DB 用RMAN 直接将备份文件放在盘柜上了,为了以防万一,老大让把这些备份文件在copy到一个备份服务器上。 RMAN 对目录有严格的要求,以后如果要恢复,还是还原到相同的目录。

之前我计划是将备份服务器共享之后,直接mount 到DB 服务器上,然后在cp 过去,这样是很简单的。但是搞系统的大哥建议用ftp来实现。 当时说是不会出现不能umount的情况,还有啥是安全什么得,这个新年一过也记不清了。 备份服务器上安装了Server-U 的FTP 服务,配置好之后,把备份文件传过来就可以了。

参考:

Linux 终端访问 FTP 及 上传下载 文件

http://www.cndba.cn/Dave/article/679

Linux find 命令 -exec 参数说明

http://blog.csdn.net/tianlesoftware/archive/2011/02/09/6175439.aspx

三步实现:

(1). 查找符合要求的文件,放到一个临时文件夹。

(2). 在ftp中使用mput 上传,上传完从临时文件夹中删除。

(3). 在备份服务器上做好删除策略。不然空间会撑满掉。

三点说明:

(1). 如果说只保留2天的话倒简单,在mput 之前用mdelete 把文件全部删除掉,在上传就可以了,因为我这里要保留多天的记录。 所以就只能在备份服务器上在弄个批处理的计划任务来删除了。

(2). mput 的时候有个问题,它会要求按下回车后在上传, 这对自动脚本来说是非常麻烦的。 我们需要关闭这个指令。

ftp>prompt

切换交谈式指令,使用mput/mget 时不用每个文件皆询问yes/no

ftp> help prompt

prompt force interactive prompting on multiple commands

ftp> prompt

Interactive mode off.

ftp> prompt

Interactive mode on.

ftp> prompt

Interactive mode off.

ftp>

不加任何参数就可以进行开发或关闭的设备,每执行一次,状态就会改变。

(3) find -mtime 参数说明

find /u01/backup/backupsets -mtime +1 -name “*” :+号 表示 1天前的文件

find /u01/backup/backupsets -mtime -1 -name “*” :表示1天内的文件

完整脚本:

Linux上传脚本:

[xezf@localhost scripts]$ cat uploadbackup.sh

#!/bin/sh

find /u01/backup/backupsets -mtime -1 -name “*” -exec cp -f {} /u01/backup/backuptmp /;

ftp -n 192.168.88.251 << EOF

user user password

bin

lcd /u01/backup/backuptmp

prompt

mput *

bye

EOF

cd /u01/backup/backuptmp

rm -rf /u01/backup/backuptmp/*

将uploadbackup.sh脚本添加到crontab,定时执行。 关于crontab,参考我的Blog:

Linux Crontab 定时任务 命令详解

http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5315039.aspx

备份服务器删除脚本:

deletebackupfile.bat

forfiles /p E:/db_backup_history/xezf /m * /d -10 /c “cmd /c del @file”

将这个bat 文件添加到计划任务,定时执行即可。我这里保留的是10天。

在自己的本本上测试没有问题。 找个测试库跑几天看看。 没问题在搬到生产库上去。

补充一句,具体情况具体对待。

 

bat脚本上传压缩包到liunx

:: 注释
::判断 文件是否存在 存在删除
if exist “D:\java\bat\amus_product_meta_tmp.zip” (
del D:\java\bat\amus_product_meta_tmp.zip
)

::判断 文件是否存在 不存在添加

if not exist “D:\java\bat\amus_product_meta_tmp.sql” (
echo >> D:\java\bat\amus_product_meta_tmp.sql
)

c:
::mysql 安装路径
cd E:\mysql\mysql-5.5.62-winx64\bin
::mysql 中am 库中的 product_meta_tmp 备份到 product_meta_tmp.sql中

mysqldump -uroot -p123456 –default-character-set=utf8 am product_meta_tmp >D:\java\bat\product_meta_tmp.sql

::临时参数
set “Ymd=amus_product_meta_tmp”
::打印一句话
echo Winrar loading…
::WinRAR:压缩包文件
::a -r -ep1 -o+ :压缩命令

::把\product_meta_tmp.sql 压缩到 ymd.zip 中

::注意:”C:\Program Files\WinRAR\Rar.exe” 使用这个路径压缩 导致 liunx中 unzip解压失败

WinRAR a -r -ep1 -o+ “D:\java\bat\%Ymd%.zip” “D:\java\bat\product_meta_tmp.sql”

::pscp windows和liunx 互传 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
::roy.ppk :秘钥 liunx 中有母文件 这是子文件
::121.xx.xx.45:服务器

pscp -i D:\java\bat\roy.ppk D:\java\bat\product_meta_tmp.zip root@121.xx.xx.45:/data/back

echo OK!
%title插图%num