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


    一、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: emp3
    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.22etc 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
     
  • 相关阅读:
    两个进程之间的通讯——pipe 管道
    if if 和 if elif 的区别
    python处理大文件——文件流处理
    DNA甲基化及其测量方法(转)
    windows 服务器安装python及其基本库
    在linux系统个人目录下安装新版python
    python 列表中 [[], [], []] 和 3*[[]]差异
    Python脚本打包为exe文件
    GC偏好的校正与偏好程度的评估
    荧光分子的dynamic quenching 和 通常说的quenching的区别?
  • 原文地址:https://www.cnblogs.com/laowangc/p/8920028.html
Copyright © 2020-2023  润新知