前言:
- 大家好,我是良辰丫,第十三篇,牛客网选择题+编程题参数解析+跳石板(动态规划).💞💞💞
- 每一次努力,都是幸运的伏笔;天再高又怎样,踮起脚尖就更接近阳光。
🧑个人主页:良辰针不戳
📖所属专栏:百日冲大厂
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。

目录

关系数据库逻辑性强物理性弱,因此关系数据库中的各条记录前后顺序可以任意颠倒,不影响库中的收据关系.
- 物理性弱就是插入顺序可以任意颠倒.
- 我们进行增删查改操作依赖于我们的条件如何写.

根据题意我们可以得出员工到计算机是1对多;计算机到员工是1对1.

视图只是定义出来的虚表,只是为了方便查找,不能进行增删改的操作,但是可以删除自己本身(也就是删除该视图),也可以进行查找操作.
- create view 视图名字 as select…
- 上面就是创建视图的方式,其实他只是简化了我们的输入的查询语句,它的查询操作和select基本一样.
select * from 视图名字.

上述基本考察的是mysql与sql server语言的数据库.
- DATEADD(datepart,number,date)
datapart参数可以为yy/yyyy/qq/q等表示日期时间
number是你希望添加时间的间隔数.
date是日期表达式.- GETDATE()函数是sql server中的.
mysql获取当前时间与日期是now(),mysql中没有GETDATE()函数
mysql中也有dateadd()函数,语法为DATE_ADD(date,INTERVAL expr type)
date参数是合法的日期表达式,expr参数是添加的时间间隔.- A与C中不能对时间直接进行加减.
- 删除前三年的,因此在时间间隔参数为-3.

- 数据定义语言(DDL),用来创建数据库的各种对象(表,视图,索引等)
create table/view/index…- 数据库操作语言(DML),主要负责数据的基本操作,包括增删查改等操作.
- 数据控制语言(DCL),用来授权或回收访问数据库的特权,并且控制数据库操作事务发生的时间及其效果,对数据库实行监视等.
grant:授权
rollback [work] to [savepoint] : 回退到某一点
rollback:回滚
回滚命令使数据库状态回到上次最后提交的状态,格式为:sql>rollback
commit [work] : 提交

数据库管理系统主要是数据库服务端,具有保存数据以及控制客户端进行访问的一类软件.

修改字段与修改表结构都与alter有关.

- between…end…左闭右闭
- interval可以作为函数,也可以作为关键字
- interval作为函数的时候,它被当做一个被比较数,例如interval(4,0,1,2,3,4,5,6),4为被比较数,后面的数为比较数,返回小于等于4的个数,返回5.
- interval作为关键字的时候,表示时间间隔,常用在date_add(),date_sub()函数中,常用于时间的加减法,在查询当前时间之前的日期:select now()-interval 2 hours


- where是分组前的过滤
- having是分组后的过滤
- D选项中说的是从结果后筛选,不是从结果,而是分组后,通过having后面的条件进行过滤后得到的结果.
做题链接:
链接: 参数解析
题目描述:


做题思路:
- 先考虑特殊情况,有双引号的时候.
- 我们先考虑参数个数,双引号算一一个整体,一对双引号是一个参数;其余的部分以空格间隔,遇到空格参数个数加1.
- abc def ghi 这个字符串有三个参数,但是有两个空格,由此可见,参数计数器默认为1;但是可能会有参数为0的情况,有时候需要特殊处理,这道题没有参数为0的情况,大家需要多方面考虑.
- 统计完参数个数,打印出来.
- 第二次遍历,要打印各个参数.
- 还是先处理双引号的,把双引号当做整体打印出来(注意不能打印双引号符号)
- 其余的直接打印,遇到空格进行换行.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int len = str.length();
//计数器统计参数个数,这里没考虑参数为0的情况
int count = 1;
for(int i = 0;i<len;i++){
//ch提取字符
char ch = str.charAt(i);
//遇到双引号进行处理,双引号为一个整体
if(ch == '"'){
do{
i++;
ch = str.charAt(i);
}while(ch != '"');
i++;
//下面的i可能会越界
if(i <len)
ch = str.charAt(i);
}
if(ch ==' '){
count++;
}
}
//处理完毕后打印count
System.out.println(count);
//第二次遍历,打印参数
for(int i = 0;i<len;i++){
//flag用来记录是否用到了双引号
int flag = 1;
char ch = str.charAt(i);
if(ch == '"'){
flag = -1;
i++;
ch = str.charAt(i);
}
if(flag == 1 && ch !=' '){
System.out.print(ch);
//遇到空格打印换行
} else if(flag == 1 && ch == ' '){
System.out.println();
}
if(flag == -1 ){
do{
System.out.print(ch);
i++;
ch = str.charAt(i);
}while(ch != '"');
flag = -flag;
i++;
System.out.println();
}
}
}
}
我们常见的循环有以下几种,我们都需要思考到,有时候do…while循环更方便一些,可以有效的判断边界.
- for循环
- foreach循环
- while循环
- do…while循环
有时候一些边界我们根本看不出来,别的实例都符合,但总有一个不符合,会越界,怎么有效的防止这种情况呢?我们可以把容易越界的语句加上条件,防止它越界.
做题链接:
链接: 跳石板
题目描述:


做题思路:
这是一道动态规划题,稍微有点难度,尤其是找不到状态转移方程的时候.那么我们该如何思考这一类问题呢?
- 模拟过程,看是否可以有重复的过程,有重复的过程往往都需要用到动态规划,并且需要理解清楚过程.
- 我们首先要理解动态规划的状态表示,集合表示什么.
- 这道题我们定义了一个数组f,数组的下标表示小易跳到的位置,f[i]表示从n到达i位置的步数.
- 我们还需要知道一个属性,也就是这道题所要求的是什么,在这里我们的属性是求到达i位置的最小步数.
- 接下来最重要的就是状态转移方程了.
- 那么状态转移该怎么想呢?每道动规找到了状态转移方程,问题基本就迎刃而解了.
- 在我们这道题中允许一次跳的步数是非1与非它本身的约数,因此我们需要找到它的约数.
- 该怎样保存它的约数呢?我们想到了集合,一个数可能有许多约数,用集合保存再好不过了.
- 有了约数我们就可以知道在该位置可以走哪几种步数,通过foreach循环进行遍历,然后选取最小值.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] f = new int[m+1];
//因为我们要求最小值,所以我们要存储一下大的数字才能凸显最小值
for(int i = 0;i<=m;i++){
f[i] = Integer.MAX_VALUE;
}
//n为刚开始的位置,刚开始没走,为0
f[n] = 0;
for(int i = n;i<=m;i++){
//下面这一句怎么理解呢?这表示i前面的位置没有
//可以直接有机会跳到此位置.(无机会)
//这种情况下既没有必要记性计算
if(f[i] == Integer.MAX_VALUE){
continue;
}
List<Integer> list = list(i);
for(int x:list){
//可以走的步数为x
//下面就是状态转移方程
if(i+x <= m&&f[i+x] != Integer.MAX_VALUE){
f[i+x] = Math.min(f[i]+1,f[i+x]);
} else if(i+x<=m){
//下面表示暂时i+x的位置没有被跳过
f[i+x] = f[i] + 1;
}
}
}
if(f[m] == Integer.MAX_VALUE){
System.out.println(-1);
}else{
System.out.println(f[m]);
}
}
//下面是找约束放入集合的过程
//一定注意细节,尤其是if与else的细节
private static List<Integer> list(int num){
List<Integer> list = new ArrayList<>();
for(int i = 2;i*i<=num;i++){
if(num%i==0){
list.add(i);
if(num/i != i){
list.add(num/i);
}
}
//下面的注释代码就不对
// else if(num%(num/i) == 0){
// if(i != num/i){
// list.add(num/i);
// }
// }
}
return list;
}
}
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
我有一个名为Post的类,我需要能够适应以下场景:如果用户选择了一个类别,则只显示该类别的帖子如果用户选择了一种类型,则只显示该类型的帖子如果用户选择了一个类别和类型,则只显示该类别中该类型的帖子如果用户没有选择任何内容,则显示所有帖子我想知道我的Controller是否不可避免地会因大量条件语句而显得粗糙...这是我解决此问题的错误方法-有谁知道我如何才能做到这一点?classPostsController 最佳答案 您最好遵循“胖模型,瘦Controller”的惯例,这意味着您应该将这种逻辑放在模型本身中。Post类应该能够报告