常见问题及解决方案(后端篇)

一、Jenkins 密码遗忘?

Jenkins专有用户的数据存放在JENKINS_HOME/users目录。users目录的结构我就不扯了,你一看就懂。users/xxx(各种用户名) 如上:

1 打开忘记密码的用户文件夹,里面就一个文件config.xml。
2 打开config.xml,里面有一堆的东西,找找。。。找到<passwordHash>节点。
3 把<passwordHash>节点的内容(图中黑色的那一串)换成#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS(注意前后有木有空格)
4 保存,重启Jenkins程序。
5 输入用户名,密码111111

二、 classpath 和 classpath* 区别:

classpath:只会到你指定的class路径中查找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

三、idea maven项目 热部署(SpringBoot热部署)

1) “File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,选中打勾 “Build project automatically” 。

2) 组合键:“Shift+Ctrl+Alt+/” ,选择 “Registry” ,选中打勾 “compiler.automake.allow.when.app.running” 。

四、IntelliJ Idea 常用快捷键列表

psvm 创建main方法
for 循环
sout == System.out.println();
ctrl+alt+v 创建返回值对象
alt+Enter 错误提示修正
ctrl+c 复制当前一行
Ctrl+Y:不再是对应Ctrl+Z的恢复,而是删除上一行,IDEA中恢复是Ctrl+Shit+Z
ctrl+shift+上 上移一行
ctrl+shift+下 下移一行
ctrl+shift+F 查找,类似eclipse的ctrl+h

Alt+回车 导入包,自动修正
Ctrl+N 查找类
Ctrl+Shift+N 查找文件
Ctrl+Alt+L 格式化代码
Ctrl+Alt+O 优化导入的类和包
Alt+Insert 生成代码(如get,set方法,构造函数等)
Ctrl+E或者Alt+Shift+C 最近更改的代码
Ctrl+R 替换文本
Ctrl+F 查找文本
Ctrl+Shift+Space 自动补全代码
Ctrl+空格 代码提示
Ctrl+Alt+Space 类名或接口名提示
Ctrl+P 方法参数提示
Ctrl+Shift+Alt+N 查找类中的方法或变量
Alt+Shift+C 对比最近修改的代码

Shift+F6 重构-重命名
Ctrl+Shift+先上键
Ctrl+X 删除行
Ctrl+D 复制行
Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*...*/ )
Ctrl+J 自动代码
Ctrl+E 最近打开的文件
Ctrl+H 显示类结构图
Ctrl+Q 显示注释文档
Alt+F1 查找代码所在位置
Alt+1 快速打开或隐藏工程面板
Ctrl+Alt+ left/right 返回至上次浏览的位置
Alt+ left/right 切换代码视图
Alt+ Up/Down 在方法间快速移动定位
Ctrl+Shift+Up/Down 代码向上/下移动。
F2 或Shift+F2 高亮错误或警告快速定位

代码标签输入完成后,按Tab,生成代码。
选中文本,按Ctrl+Shift+F7 ,高亮显示所有该文本,按Esc高亮消失。
Ctrl+W 选中代码,连续按会有其他效果
选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。
Ctrl+Up/Down 光标跳转到第一行或最后一行下
Ctrl+B 快速打开光标处的类或方法

五、JSON跨域问题:

一、跨域问题的原因:

1 浏览器的检查

2 跨域

3 XMLHttpRequest请求

二、跨域问题的解决:

1 禁止浏览器检查:
使用dos命令,在启动浏览器的时候,加一个参数:
chrome --disable-web-security --user-data-dir=g:\temp3
2 JSONP:
JSONP是什么:

  JSONP是一种协议
JSONP解决跨域的时候后台代码需要改变吗:

  需要。
需要加一个切面:

@ControllerAdvice

并且让这个类要继承AbstractJsonpResponseBodyAdvice
并且重写构造方法:

1   JsonpAdvice(){
2     super("callback");
3   }

JSONP的实现原理:
JSONP的弊端:
  服务器需要改动代码
  只支持GET
  发送的不是XHR请求
3 请求是跨域的与隐藏跨域:
被调用方解决:
服务器端实现:
配置Filter:

1 @Bean
2 public FilterRegistrationBean registerFilter(){
3     FilterRegistrationBean bean=new FilterRegistrationBean();
4     bean.addUrlPattern("/*");
5     bean.setFilter(new CrosFilter());
6 }

创建一个Filter:

public class CrosFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException{
    }
    @Override
    public void doFilter(ServletRequest request,ServletResponse         
    response,FilterChain filterChain)throws IOException,     
    ServletException{
    HttpServletResponse res=(HttpServletResponse)response;
    res.addHeader("Access-Control-Allow-Origin","http://localhost:8081");
    res.addHeader("Access-Control-Allow-Methods","GET");
    res.addHeader("Access-Control-Allow-Headers","Content-Type");
    filterChain.doFilter(request,response);
    }
}

此处的res.addHeader("Access-Control-Allow-Origin","*");可以使用*来表示所有的域,方法也可以使用*来表示所有的方法。
简单请求和非简单请求:
  工作中比较常见的【简单请求】:
    方法为:GET HEAD POST
    请求header里面:无自定义头、Content-Type为以下几种:
    text/plain
    multipart/form-data
    application/x-www-form-urlencoded
  工作中比较常见的【非简单请求】:
    put,delete方法的ajax请求
    发送json格式的ajax请求
    带自定义头的ajax请求
    OPTIONS预检命令:
    OPTIONS预检命令缓存:

res.addHeader(“Access-Control-Max-Age”,”3600”);//表示在一小时内缓存这个OPTIONS信息,不用每次请求都请求两次。

带Cookie的跨域问题:
Origin必须是全匹配,不能使用*,必须指定域名;并且需要在Filter里面增加:
res.addHeader(“Access-Control-Allow-Credentials”,”true”);
带自定义头的跨域问题:
被调用方-Nginx解决方案:
1 配置虚拟文件vhost:在nginx的目录中创建一个文件夹,命名为vhost,并在nginx的配置文件中的最后一行中加入以下代码:include vhost/*.conf,将vhost中的.conf文件加载进来。
2 在vhost文件夹下新建一个文件b.com.conf,使用nginx的语法,在该文件中加入以下内容:

1 server{
2     listen 80; //监听的端口
3     server_name b.com;
4     location /{
5     proxy_pass http://localhost:8080/;
6     }
7 }

此时访问b.com便可以代替之前的localhost:8080进行访问。
3 继续在以上文件中添加:

 1 location /{
 2     proxy_pass http://localhost:8080/;
 3     add_header Access-Control-Allow-Methods *;
 4     add_header Access-Control-Max-Age 3600;
 5     add_header Access-Control-Allow-Credentials true;
 6 
 7     add_header Access-Control-Allow-Origin $http_origin;
 8     add_header Access-Control-Allow-Headers     
 9     $http_access_control_request_headers;
10     if ($request_method=OPTIONS){
11     return 200;
12     }
13 }

 

Apache配置:
1 打开apache根目录下的conf文件夹下的httpd.conf文件,并搜索vhost,解开LoadModule vhost_alias_module modules/mod_vhost_alias.so
2 继续搜索vhost,解开Include conf/extra/httpd-vhosts.conf
3 打开conf文件夹下的extra文件夹下的httpd-vhosts.conf
4 增加一个虚拟主机,复制一份,并且修改为以下内容:

1 <VirtualHost *:80>
2     ServerName b.com
3     ErrorLog "logs/b.com-error.log"
4     CustomLog "logs/b.com-access.log" common
5     ProxyPass / http://localhost:8080/
6 </VirtualHost>

5 在httpd.conf文件中解开proxy模块:LoadModule proxy_module modules/mod_proxy.so (140行)
6 在httpd.conf文件中解开proxy http模块:LoadModule proxy_http_module modules/mod_proxy_http.so
7 进入apache的bin目录,双击httpd.exe文件,启动apache。
8 在httpd-vhosts.conf文件中增加响应头:

 1 <VirtualHost *:80>
 2     ServerName b.com
 3     ErrorLog "logs/b.com-error.log"
 4     CustomLog "logs/b.com-access.log" common
 5     ProxyPass / http://localhost:8080/
 6 
 7     #把请求头的origin值返回到Access-Control-Allow-Origin字段
 8     Header always set Access-Control-Allow-Origin "expr=%    
 9    {req:origin}"
10 
11     #把请求头的Access-Control-Request-Headers值返回到Access-Control-Allow-Headers字段
12     Header always set Access-Control-Allow-Headers "expr=%
13     {req:Access-Control-Request-Headers}"
14 
15     Header always set Access-Control-Allow-Methods "*"
16     Header always set Access-Control-Max-Age "3600"
17     Header always set Access-Control-Allow-Credentials "true"
18 
19     #处理预检命令OPTIONS,直接返回204
20     RewriteEngine On
21     RewriteCond %{REQUEST_METHOD} OPTIONS
22     RewriteRule ^(.*)$ "/"[R=204,L]
23 </VirtualHost>  

9 在httpd.conf文件中,解开headers模块:LoadModule headers_module modules/mod_headers.so
10 在httpd.conf文件中,打开rewrite模块:LoadModule rewrite_module modules/mod_rewrite.so

Spring框架的跨域解决:
在控制器中使用@CrossOrigin注解
调用方解决-隐藏跨域:
1 在hosts文件中,增加一个虚拟域名:127.0.0.1 b.com a.com
2 在nginx的vhosts文件夹中新建一个a.com.conf,打开:

 1 server{
 2     listen 80;
 3     server_name a.com;
 4     location /{
 5     proxy_pass http://localhost:8081/;
 6     }
 7     location /ajaxserver{
 8     proxy_pass http://localhost:8080/test/;
 9     }
10 }

 六、Jetty的安装:

前提:必须安装jdk。
1.下载Jetty安装包:http://dist.codehaus.org/jetty/jetty-6.1.22/
2.解压至任意目录
3.直接进入bin目录,双击Jetty-Service.exe。启动成功
4.地址栏直接输入http://localhost:8080
ps:
1.修改E:\jetty-6.1.22\etc\ jetty.xml文件中的如下代码,将8080改为相应的端口号即可
2.myeclipse使用Jetty跟tomcat一样,选择jetty目录便可。

七、解决windows无法创建.gitignore文件:

今天打算把本地的项目用git推送到github上去,但是有的信息我又不想把它加入到版本控制系统中去,例如.classpath文件和.class文件等等,这个时候我就想到了使用.gitignore文件把不需要做版本控制的文件排除出去,我打算在我的项目根目录下新建一个.gitignore文件,当我写好文件名并按下回车键的时候我得到了这个错误。

不知道从Windows的哪个版本开始,系统不能创建.xxx的文件了,我记得XP系统还可以创建这种文件的。谷歌了各种解决方案,最终在stackoverflow上面找到了比较好的解决方案:

1. 在项目根目录下面创建gitignore.txt文件

2. 把你需要排除的文件名保存到gitignore.txt文件

3. 在项目根目录下面按住Shift键并邮件然后选择“在此处打开命令窗口”

4. 执行命令 ren gitignore.txt .gitignore

大功告成了!


或者:创建一个文件,文件名为:“.gitignore.”,注意前后都有一个点。保存之后系统会自动重命名为“.gitignore”。

 八、dubbo工作流程:

首先是容器初始化providerprovider向注册中心(Zookeeper)注册服务,

Consumer启动时,首先去Zookeeper上订阅需要消费URL,说白了就是拿到一个List<URL>即可

然后dubbo拿到这个List<URL>后,通过一种算法选择list中的一个URL,然后使用这个URL中的IP和端口,来发起一个invoke请求(你可以理解发送了一个HTTP请求)
而这请求都会被dubbo收集下来了,然后发送到远程进行保存。

dubbo工作流程图:

 

九、Android一些基本概念:

1 Activity

三个状态:创建、暂停、结束

七个周期:onCreate(),onStart(),onResume(),onPause(),onStop(),onRestart(),onDestroy()

打开另外一个Activity:
绑定按钮的onclick事件,实现onclick方法,创建一个Intent对象,获取当前activity的对象,绑定的activity对象,startActivity():

1 btn=(Button)findViewById(R.id.btn);//绑定某个按钮
2 btn.setOnclickListener(new View.OnClickListener(){//注册按钮监听事件
3 #Override
4 public void onClick(View v){
5 Intent i=new Intent(MainActivity.this,Aty1.class);//创建Intent对象
6 startActivity(i);//打开另外一个Activity
7 }
8 })

Activity传值:
1 i.putExtra(String,String) -> getIntent().getExtraString("")
2 Bundle 对象传递数据:
Bundle data = new Bundle();

怎么获取第二个Activity返回的值?
//在主Activity中:
使用startActivityResult(i,requestCode);
重写:

1 @Override
2 protected void onActivityResult(int requestCode,resultCode,Intent data){
3     String result=data.getStringExtra("result");
4     super.onActivityResult(requestCode,resultCode,data);
5 }

//在第二个Activity中:

setResult(int resultCode,Intent data);

2 Service 后台处理信息,可以一直运行在后台

 1 @Override
 2 onCreate()//创建Service的方法
 3 @Override
 4 onDestroy()//关闭Service的方法
 5 @Override
 6 public IBinder onBind(Intent intent) //绑定服务
 7 创建Service的方法:
 8 Intent serviceIntent=new Intent(this,EchoService);//第一个参数是当前的Activity,第二个参数是Service类的名字    
 9 
10 startService(serviceIntent);//点击按钮时,开启服务
11 stopService(serviceIntent);//点击按钮时,关闭服务
12 bindService(serviceIntent,this,Context.BIND_AUTO_CREATE);//点击按钮时,    绑定某个服务
13 unbindService(this);//点击按钮时,关闭服务。

在使用Service时,需要主Activity实现ServiceConnection,并实现未实现的方法:

1 @Override
2 public void onServiceConnected(ComponentName name,IBinder service);//当成功绑定时,做某些操作
3 @Override
4 public void onServiceDisconnected(ComponentName name);//当服务断开连接时,做某些操作

此时无法执行到onServiceConnected()方法,是因为只执行了onCreate()和onBind()方法,而onBind()方法中有一个返回对象是IBinder,需要给一个返回对象。
想要真正绑定服务成功,需要在EchoService中创建:

 1 public IBinder onBind(Intent intent){
 2 
 3 return echoSerivceBinder;
 4 }
 5 
 6 private final EchoServiceBinder echoSerivceBinder=new EchoServiceBinder();
 7 
 8 public class EchoServiceBinder extends Binder{//内部类
 9 
10 }

十、:maven打包带main函数:

 1  <build>  
 2         <!-- 配置文件 -->  
 3       <resources>  
 4             <resource>  
 5                     <targetPath>${project.build.directory}/classes</targetPath>  
 6                 <directory>src/main/resources</directory>  
 7                 <filtering>true</filtering>  
 8                 <includes>  
 9                     <include>**/*.xml</include>  
10                     <include>**/*.properties</include>  
11                 </includes>  
12             </resource>  
13             <resource>  
14                 <targetPath>${project.build.directory}/classes/META-INF</targetPath>  
15                 <directory>src/main/resources</directory>  
16                 <filtering>true</filtering>  
17                 <includes>  
18                     <include>spring-context.xml</include>  
19                 </includes>  
20             </resource>  
21         </resources> -->  
22           
23         <pluginManagement>  
24             <plugins>  
25                 <!-- 解决Maven插件在Eclipse内执行了一系列的生命周期引起冲突 -->  
26                 <plugin>  
27                     <groupId>org.eclipse.m2e</groupId>  
28                     <artifactId>lifecycle-mapping</artifactId>  
29                     <version>1.0.0</version>  
30                     <configuration>  
31                         <lifecycleMappingMetadata>  
32                             <pluginExecutions>  
33                                 <pluginExecution>  
34                                     <pluginExecutionFilter>  
35                                         <groupId>org.apache.maven.plugins</groupId>  
36                                         <artifactId>maven-dependency-plugin</artifactId>  
37                                         <versionRange>[2.0,)</versionRange>  
38                                         <goals>  
39                                             <goal>copy-dependencies</goal>  
40                                         </goals>  
41                                     </pluginExecutionFilter>  
42                                     <action>  
43                                         <ignore />  
44                                     </action>  
45                                 </pluginExecution>  
46                             </pluginExecutions>  
47                         </lifecycleMappingMetadata>  
48                     </configuration>  
49                 </plugin>  
50             </plugins>  
51         </pluginManagement>  
52         <plugins>  
53             <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->  
54             <plugin>  
55                 <groupId>org.apache.maven.plugins</groupId>  
56                 <artifactId>maven-jar-plugin</artifactId>  
57                 <configuration>  
58                     <classesDirectory>target/classes/</classesDirectory>  
59                     <archive>  
60                         <manifest>  
61                             <!-- 主函数的入口 -->  
62                             <mainClass>tpri.mina.execute.Main</mainClass>  
63                             <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->  
64                             <useUniqueVersions>false</useUniqueVersions>  
65                             <addClasspath>true</addClasspath>  
66                             <classpathPrefix>lib/</classpathPrefix>  
67                         </manifest>  
68                         <manifestEntries>  
69                             <Class-Path>.</Class-Path>  
70                         </manifestEntries>  
71                     </archive>  
72                 </configuration>  
73             </plugin>  
74             <plugin>  
75                 <groupId>org.apache.maven.plugins</groupId>  
76                 <artifactId>maven-dependency-plugin</artifactId>  
77                 <executions>  
78                     <execution>  
79                         <id>copy-dependencies</id>  
80                         <phase>package</phase>  
81                         <goals>  
82                             <goal>copy-dependencies</goal>  
83                         </goals>  
84                         <configuration>  
85                             <type>jar</type>  
86                             <includeTypes>jar</includeTypes>  
87                             <useUniqueVersions>false</useUniqueVersions>  
88                             <outputDirectory>  
89                                 ${project.build.directory}/lib  
90                             </outputDirectory>  
91                         </configuration>  
92                     </execution>  
93                 </executions>  
94             </plugin>  
95         </plugins>  
96     </build>   
View Code
 
posted @ 2018-04-23 16:42  老王和小杨  阅读(1339)  评论(0编辑  收藏  举报