精华内容
下载资源
问答
  • 面试时应该问公司一些什么问题

    万次阅读 2017-04-07 10:36:45
    最近在面试,有好多公司到最后问“你对本公司还有什么要问的吗?”,刚上去我不知道,直接问工资待遇,生活补助,后来发现错了,没一家公司要我,郁 闷的要死,于是就分析了一下,特别对于没有太多项目经验的程序员...

    最近在面试,有好多公司到最后问“你对本公司还有什么要问的吗?”,刚上去我不知道,直接问工资待遇,生活补助,后来发现错了,没一家公司要我,郁 闷的要死,于是就分析了一下,特别对于没有太多项目经验的程序员,技术就不是太过关,有什么资格谈工资待遇?所以不问,到最后hr肯定会问你的!这时再谈 就好说了。。。。。一下是我总结的应该问的,顺序要自己定:

    1. 在贵公司是否有足够的成长空间?

    2. 这个职位上有没有特别的津贴与福利?

    3、 贵公司带薪的休假每年有多少时间?

    4、 我的简历已经写的很完整了,我还需要再填写完整的应聘记录表吗?

    5、 我的体检报告已经做过了,就不要再测了吧?

    6、 请问我以后直接汇报的领导是谁?

    7、 我没有什么问题可问的,大概什么时候可以通知我?

    8、公司主要做什么业务?

    9、公司的规模,人数(特别对于一些小公司)?

    10、方便透露一下公司今后几年的发展方向

    11、公司对新来的员工是怎么安排的?食宿,工作,特别对于程序员要问等级和职责;

    12、公司对程序员的等级制度?

    13、经常加班(或出差)吗?如果加班有什么补助?

    14、公司与本行业的其他公司相比有什么有势?

    15、公司如果遭遇金融危机,对员工的安排?

    16、公司的主要企业文化是什么?

     

    不全的希望大家补充!!!!

    展开全文
  • 什么是跨域及怎么解决跨域问题

    万次阅读 多人点赞 2018-12-07 11:36:04
    什么是跨域? 这篇博文解释的挺清楚,我直接引用https://blog.csdn.net/lambert310/article/details/51683775 跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制...

    什么是跨域?

    这篇博文解释的挺清楚,我直接引用 什么是跨域?怎么解决跨域问题?_L瑜-CSDN博客_跨域是什么意思

    跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。

    所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。不明白没关系,举个栗子:

    http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)

    http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)

    http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

    http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

    http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)

    请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

    浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

    跨域会阻止什么操作?

    浏览器是从两个方面去做这个同源策略的,一是针对接口的请求,二是针对Dom的查询

    1.阻止接口请求比较好理解,比如用ajax从http://192.168.100.150:8020/实验/jsonp.html页面向http://192.168.100.150:8081/zhxZone/webmana/dict/jsonp发起请求,由于两个url端口不同,所以属于跨域,在console打印台会报No 'Access-Control-Allow-Origin' header is present on the requested resource

    值得说的是虽然浏览器禁止用户对请求返回数据的显示和操作,但浏览器确实是去请求了,如果服务器没有做限制的话会返回数据的,在调试模式的network中可以看到返回状态为200,且可看到返回数据

    2.阻止dom获取和操作

    关于iframe中对象的获取方式请看:js iframe获取documen中的对象为空问题_lianzhang861的博客-CSDN博客_获取iframe的document

    比如a页面中嵌入了iframe,src为不同源的b页面,则在a中无法操作b中的dom,也没有办法改变b中dom中的css样式。

    而如果ab是同源的话是可以获取并操作的。

    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<style type="text/css">
    			iframe{
    				width:100%;height:800px;
    			}
    		</style>
    	</head>
    	<body>
    		<!--<iframe src="http://192.168.100.150:8081/zhxZone/webmana/attachment/imageManager" frameborder="0" id="iframe"></iframe>-->
    		<iframe src="http://192.168.100.150:8020/实验/jsonp.html" frameborder="0" id="iframe"></iframe>
    		<script type="text/javascript">
    			var i=document.getElementById("iframe");
    			i.onload=function(){
    				/*console.log(i.contentDocument)
    				console.log(i.contentWindow.document.getElementById("text").innerHTML)*/
    				var b=i.contentWindow.document.getElementsByTagName("body")[0];
    				i.contentWindow.document.getElementById("text").style.background="gray";
    				i.contentWindow.document.getElementById("text").innerHTML="111";
    			}
    		</script>
    	</body>
    </html>

    改变了iframe中的元素 

    甚至是可以获取iframe中的cookie

    var i=document.getElementById("iframe");
    i.onload=function(){
    	console.log(i.contentDocument.cookie)
    }

    不用说也知道这是极为危险的,所以浏览器才会阻止非同源操作dom

    浏览器的这个限制虽然不能保证完全安全,但是会增加攻击的困难性

    虽然安全机制挺好,可以抵御坏人入侵,但有时我们自己需要跨域请求接口数据或者操作自己的dom,也被浏览器阻止了,所以就需要跨域

    跨域的前提肯定是你和服务器是一伙的,你可以控制服务器返回的数据,否则跨域是无法完成的 

    解决跨域的方法:

    1.前端方法就用jsonp

    jsonp是前端解决跨域最实用的方法

    原理就是html中 的link,href,src属性都是不受跨域影响的,link可以调用远程的css文件,href可以链接到随便的url上,图片的src可以随意引用图片,script的src属性可以随意引入不同源的js文件

    看下面代码,a.html页面中有一个func1方法,打印参数ret

    <body>
    	<script type="text/javascript">
    		function func1(ret){
    			console.log(ret)
    		}
    	</script>
    	<script src="http://192.168.100.150:8081/zhxZone/webmana/dict/jsonp.js" type="text/javascript" charset="utf-8"></script>
    </body>

    而引入的jsonp.js中的代码为:

    func1(111)

    可想而知结果会打印出 111,也就是说a页面获取到了jsonp.js中的数据,数据是以调用方法并将数据放到参数中返回来的

    但是这样获取数据,必须a.html中的方法名与js中的引用方法名相同,这样就是麻烦很多,最好是a.html能将方法名动态的传给后台,后台返回的引入方法名就用我传给后台的方法名,这样就做到了由前台控制方法名

    总之要做到的就是前台像正常调接口一样,后台要返回回来js代码即可

    现在改为动态方法名:我请求的接口传入callback参数,值为方法名func1

    <body>
    	<script type="text/javascript">
    		function func1(ret){
    			console.log(ret)
    		}
    		
    	</script>
    	<script src="http://192.168.100.150:8081/zhxZone/webmana/dict/jsonp?callback=func1" type="text/javascript" charset="utf-8"></script>
    </body>

    后台返回不同编程语言不同,我使用的是java,所以我展示一下java返回的方法

    //jsonp测试
    @ResponseBody
    @RequestMapping(value = "jsonp", produces = "text/plain;charset=UTF-8")
    public void jsonp(String callback, HttpServletRequest req, HttpServletResponse res) {
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        RetBase ret=new RetBase();
        try {
            res.setContentType("text/plain");
            res.setHeader("Pragma", "No-cache");
            res.setHeader("Cache-Control", "no-cache");
            res.setDateHeader("Expires", 0);
            Map<String,Object> params = new HashMap<String,Object>();
            list = dictService.getDictList(params);
            ret.setData(list);
            ret.setSuccess(true);
            ret.setMsg("获取成功");
            PrintWriter out = res.getWriter();
            //JSONObject resultJSON = JSONObject.fromObject(ret); //根据需要拼装json
            out.println(callback+"("+JSON.toJSONString(ret)+")");//返回jsonp格式数据
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    上述java代码相当于我返回了 " func1(数据) "的代码,所以返回数据成功打印,完成了跨域请求

    到这里,每次请求数据还要引入一个js才行,代码有些杂乱,前端可以继续优化代码,动态的生成script标签

    <script type="text/javascript">
    	function func1(ret){
    		console.log(ret)
    	}
    	var url="http://192.168.100.150:8081/zhxZone/webmana/dict/jsonp?callback=func1";
    	var s=document.createElement("script");
    	s.setAttribute("src",url);
    	document.getElementsByTagName("head")[0].appendChild(s);
    	
    </script>

     这样,原生的jsonp跨域就基本完成了,但是用起来不是很方便

    我推荐使用jquery封装的jsonp,使用起来相对简单

    使用起来跟使用ajax类似,只是dataType变成了jsonp,且增加了jsonp参数,参数就是上述的callback参数,不需要管他是啥值,因为jq自动给你起了个名字传到后台,并自动帮你生成回调函数并把数据取出来供success属性方法来调用

    jq jsonp标准写法:

    $.ajax({
        type: 'get',
        url: "http://192.168.100.150:8081/zhxZone/webmana/dict/jsonp",
        dataType: 'jsonp',
        jsonp:"callback",
        async:true,
        data:{
            
        },
        success: function(ret){
            console.log(ret)
        },
        error:function(data) {
        },
    });

    jq jsonp的简便写法:

    $.getJSON("http://192.168.100.150:8081/zhxZone/webmana/dict/jsonp?callback=?",function(ret){
    	console.log(ret)
    })

    后台接收到的callback参数,jq自己起的名字

    这样使用起来就跟ajax一样顺手了,把返回的值在success中操作即可,只不过是可以跨域了

    这里针对ajax与jsonp的异同再做一些补充说明:

    1、ajax和jsonp这两种技术在调用方式上”看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery框架都把jsonp作为ajax的一种形式进行了封装。

    2、但ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加

    2.后台配置解决跨域

      要说前端解决跨域用jsonp最好,但我更喜欢通过配置后台设置

    同样,因为我用的java,所有我只能列举java的配置方法

    我用的是 maven,spring mvc

    首先在pom.xml中引入依赖

    <!--跨域依赖-->
    <dependency>
        <groupId>com.thetransactioncompany</groupId>
        <artifactId>cors-filter</artifactId>
        <version>1.7.1</version>
    </dependency>
    <dependency>
        <groupId>com.thetransactioncompany</groupId>
        <artifactId>java-property-utils</artifactId>
        <version>1.9</version>
    </dependency>
    <dependency>

    然后在web.xml配置过滤器

    <!--为了允许跨域访问-->
    <filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    这样前端就可以尽情跨域请求数据了,是不是很方便?

    注意如果项目中配置了检测是否登录过滤器,可能会起冲突,因为没有登录的话每次都会跳转到登录接口。。。

    下面再列举一些解决跨域方法,这些跨域方法有局限性也有特殊场景用途,应该了解一下

    3.通过修改document.domain来跨子域

    此方法有介绍价值,因为关系到操作dom方面的跨域

    上述方法都只能解决请求跨域,而无法解决跨域操作dom,因为想操作dom条件比较苛刻,必须这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致

    这个在这篇文章里有介绍 https://segmentfault.com/a/1190000005863659

    @(StuRep)

    document.domain

    用来得到当前网页的域名。
    比如在地址栏里输入:

    代码如下:
    javascript:alert(document.domain); //www.jb51.net

    我们也可以给document.domain属性赋值,不过是有限制的,你只能赋成当前的域名或者基础域名。
    比如:

    代码如下:
    javascript:alert(document.domain = "jb51.net"); //jb51.net
    javascript:alert(document.domain = "www.jb51.net"); //www.jb51.net

    上面的赋值都是成功的,因为www.jb51.net是当前的域名,而jb51.net是基础域名。
    但是下面的赋值就会出来"参数无效"的错误:

    代码如下:
    javascript:alert(document.domain = "cctv.net"); //参数无效
    javascript:alert(document.domain = "www.jb51.net"); //参数无效

    因为cctv.net与www.jb51.net不是当前的域名也不是当前域名的基础域名,所以会有错误出现。这是为了防止有人恶意修改document.domain来实现跨域偷取数据。

    利用document.domain 实现跨域:
    前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域.
    Javascript出于对安全性的考虑,而禁止两个或者多个不同域的页面进行互相操作。
    相同域的页面在相互操作的时候不会有任何问题。

    比如在:aaa.com的一个网页(a.html)里面 利用iframe引入了一个bbb.com里的一个网页(b.html)。
    这时在a.html里面可以看到b.html里的内容,但是却不能利用javascript来操作它。因为这两个页面属于不同的域,在操作之前,js会检测两个页面的域是否相等,如果相等,就允许其操作,如果不相等,就会拒绝操作。
    这里不可能把a.html与b.html利用JS改成同一个域的。因为它们的基础域名不相等。(强制用JS将它们改成相等的域的话会报跟上面一样的"参数无效错误。")

    所以如果在a.html里引入aaa.com里的另一个网页,是不会有这个问题的,因为域相等。
    有另一种情况,两个子域名:
    aaa.xxx.com
    bbb.xxx.com
    aaa里的一个网页(a.html)引入了bbb 里的一个网页(b.html),
    这时a.html里同样是不能操作b.html里面的内容的。
    因为document.domain不一样,一个是aaa.xxx.com,另一个是bbb.xxx.com。
    这时我们就可以通过Javascript,将两个页面的domain改成一样的,
    需要在a.html里与b.html里都加入:

    代码如下:
    document.domain = "xxx.com";

    这样这两个页面就可以互相操作了。也就是实现了同一基础域名之间的"跨域"。

    4.通过window.name跨域

    跨域解决方法之window.name_小白变怪兽-CSDN博客

    5.通过HTML5中新引进的window.postMessage方法来跨域传送数据

    这个跨域主要是用于多iframe窗口之间消息传递或者父窗口与iframe传递消息的,属于比较狭义的跨域。比如在a界面修改内容,点击保存后b页面的表格自动刷新就可以使用这个。或者子iframe做了事件,父在跨域的情况下无法获取子的事件,但通过消息传递就可以间接获取到事件。

    前提:跨域和被跨域的一方都是你可以控制的,一方写发送消息的,另一方写接收消息方法

    注意这跨域的局限性在于必须在同一个window对象上,也就是说哪个window发送消息,只有本window才能接收到。

    主要语法:

    发送message

    window.postMessage(message, targetOrigin);

    监听并接收message

    window.parent.addEventListener("message",function(res){
    	console.log(res)
    })

    详细介绍看这个 html5 postMessage的跨域问题_lianzhang861的博客-CSDN博客_postmessage跨域

    这里面详细介绍了应用场景和注意事项

    6.通过 CORS解决跨域

    CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否.

    *这其实和第2中方法(后台配置)基本相同,都是通过过滤器在response中返回头部,使服务器和浏览器可互通

    Access-Control-Allow-Origin:指定授权访问的域
    Access-Control-Allow-Methods:授权请求的方法(GET, POST, PUT, DELETE,OPTIONS等)

    适合设置单一的(或全部)授权访问域,所有配置都是固定的,特简单。也没根据请求的类型做不同的处理

    依旧是列举java中的方法。。。

    首先自己写一个过滤器CORSFilter

    package com.xxx.common.filter;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.filter.OncePerRequestFilter;
    
    import javax.servlet.FilterChain;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * Created by 12143 on 2018/12/7.
     */
    @Component
    public class CORSFilter extends OncePerRequestFilter {
        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
            response.addHeader("Access-Control-Allow-Origin", "http://192.168.100.150:8020");
            //response.addHeader("Access-Control-Allow-Origin", "*");
            response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
            response.addHeader("Access-Control-Allow-Headers", "Content-Type");
            response.addHeader("Access-Control-Max-Age", "1800");//30 min
            filterChain.doFilter(request, response);
        }
    }

    注意:Access-Control-Allow-Origin为*则允许所有url访问,如果为“http://192.168.100.150:8020”则只有此url才能访问,注意有端口的要把端口也写上
    比如配置了http://192.168.56.130:8081,那么只有http://192.168.56.130:8081 能拿到数据,否则全部报403异常

    然后在web.xml中添加此过滤器

    <filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>com.xxx.common.filter.CORSFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    完成

    7.通过Nginx反向代理 

    上个方法跨域是借助了浏览器对 Access-Control-Allow-Origin 的支持。但有些浏览器是不支持的,所以这并非是最佳方案,现在我们来利用nginx 通过反向代理 满足浏览器的同源策略实现跨域! 

    这里是一个nginx启用COSR的参考配置

    #
    # Wide-open CORS config for nginx
    #
    location / {
         if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            #
            # Custom headers and headers various browsers *should* be OK with but aren't
            #
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
            #
            # Tell client that this pre-flight info is valid for 20 days
            #
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
         }
         if ($request_method = 'POST') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
         }
         if ($request_method = 'GET') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
         }
    }

     云服务器ESC购买地址:云服务器ECS_云主机_服务器托管_弹性计算-阿里云

    对象存储oss购买地址:对象存储OSS_云存储服务_企业数据管理_存储-阿里云

    SSL证书购买地址:证书服务_SSL数字证书_HTTPS加密_服务器证书_CA认证-阿里云

    CDN云产品购买地址 :CDN_内容分发网络_CDN网站加速-阿里云

    展开全文
  • Java面试Offer直通车

    万人学习 2019-12-18 15:19:52
    1、68讲视频课,500道大厂Java常见面试题+100个Java面试技巧与答题公式+10万字核心知识解析+授课老师1对1面试指导+无限次回放 2、这门课程基于胡书敏老师8年Java面试经验,调研近百家互联网公司及面试官的问题打造...
  • Java进阶高手课-并发编程透彻理解

    千人学习 2020-04-17 13:39:23
    1. 课程聚焦Java并发编程的核心知识点,以真实场景项目实战为导向,循序渐进,深入浅出的了解并发编程,讲解Java这门使用广泛的编程语言,助你能够游刃有余地游走在这些技术之中。
  • Git 实用技巧

    千人学习 2019-11-24 18:20:42
    但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、...
  • 1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 ... 5、本课程注重实践每一个知识点都有相对应的实例,本书覆盖的实例多达上百个,提高学员的动手能 力和解决问题能力。
  • 兼容Windows和Mac操作系统,同时讲解两种系统下的快捷键操作,不用担心操作上的障碍问题。 课程特色: 1、以实际PS图像编辑与合成的流程为导向,绝大多数内容都是为了完成某个具体任务,而不是为了讲解某个软件操作...
  • MySQL数据库从入门到实战课

    万人学习 2019-12-31 14:09:39
    什么说每一个程序员都应该学习MySQL? 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库...
  • 董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则...
  • Android界面控件难点精讲

    万人学习 2016-05-26 10:35:48
    如果能够使用MVC模式进行开发,则开发效率会高很多,此时,我们则可以使用AdapterView与Adapter高级控件来实现类似MVC的模式进行开发,从而大大提高开发效率本课中会给出AdapterView与Adapter的解决具体问题的应用...
  • 什么呢?因为我们缺少的不是知识而是设计电路的思路,缺少的是实战经验,这也许是长久以来困扰着很多人的问题。本视频我将从设计电路的思路入手,用不同于课本的知识从全新的角度对元器件进行讲解,及用我们设计...
  • 看算法的时候经常会碰到NP问题、NP难问题(NPH)和NP完全问题(NPC)等术语,每次碰到的时候都似懂非懂,这次专门在网上搜了一些资料看,做一下记录,权当加深印象。 NP是指Non-deterministic Polynomial-time,即非...

    看算法的时候经常会碰到NP问题、NP难问题(NPH)和NP完全问题(NPC)等术语,每次碰到的时候都似懂非懂,这次专门在网上搜了一些资料看,做一下记录,权当加深印象。
    NP是指Non-deterministic Polynomial-time,即非确定性多项式时间。与NP相关的总共有四类问题,是计算复杂度理论中研究的主要内容之一。

    1. P问题:Polynomial-time问题,即指在多项式时间内可用算法求解的问题
    2. NP问题:Non-deterministic Polynomial-time问题,指不确定是否存在多项式时间的求解算法,但可以在多项式时间内验证一个猜测解的正确性。(针对NP问题有一个千年难题,即NP=P?,也即是否所有能在多项式时间内验证得出正确解的问题,都是具有多项式时间算法的问题,至今尚未有定论)
    3. NP难问题:NP-hard(NPH)问题,如果所有NP问题可在多项式时间内转化(归约,意思是解决了后者也就相应的解决了前者)成某个问题,则该问题称为NP难问题。
    4. NP完全问题:NP-complete(NPC)问题,如果所有NP问题可在多项式时间内归约成某个NP问题,则该NP问题称为NP完全问题。也就是说NP完全问题既是NP难问题又是NP问题。

      下面贴一张图把四者的关系捋一捋
      这里写图片描述

    参考资料:
    1.[总结]算法中的P问题、NP问题、NP完全问题和NP难问题
    2.Wiki百科-NP困难问题

    展开全文
  • 除此之外,你还可以收获每一章节遇到的重难点问题的解决方案。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/26227 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程永久有效...
  • 一个NP完全问题,如果能找到它的多项式时间解

    P是否等于NP是计算复杂度理论里面最著名的未解决的问题之一,一个NP完全问题,如果能找到解决它的多项式时间算法,那么就说明了P=NP。

    如今0-1背包问题已经被证明是NP完全问题,而它却有着一个动态规划解法,该解法有着O(n*W)的时间复杂度,其中n是物品的个数,W是背包限制的最大负重。所以时间复杂度对输入n,W来说是多项式时间的,所以说明了NP=P!是不是哪里出错了呢?

    其实多项式时间是相对于输入规模来说的,输入规模最直观的理解就是输入到该算法的数据占了多少比特内存。0-1背包的输入有n个物品的价值,n个物品的重量,还有背包的最大负重W。如今假设W占用的比特数为L(也就是说背包的最大负重的输入规模是L),那么log(W)=L,所以O(n*W)=O(n*2^L),由此看到,该算法的时间复杂度对于输入规模L来说是指数级别的,随着输入规模L的增加,运算时间会迅速增长。

    实际上,人们把这种动态规划的算法称为伪多项式时间算法(pseudo-polynomial time algorithm),这种算法不能真正意义上实现多项式时间内解决问题。

    展开全文
  • 同时,增强AI的理论学习,系统掌握机器学习3大分支、模型评估方法、数据预处理常用手段与过拟合问题的解决方案。 三、实战篇: 通过4个实战全面掌握深度学习理论与实现,涵盖目标检测、图像分类、可视化和可解释性...
  • 对于“NP难问题”的理解

    万次阅读 多人点赞 2015-07-27 22:21:10
    (2)非确定性算法(Nondeterminism):设A是求解问题Π的一个算法,它将问题分解成两部分,分别为猜测阶段和验证阶段,其中猜测阶段:在这个阶段,对问题的输入实例产生一个任意字符串y,在算法的每一次运行时,串y
  • 发现问题,解决问题

    万次阅读 2018-02-05 08:50:08
    如果不采纳,想想是什么原因,调整方案 做到让朋友们乐于这样解决问题,当然,你不能花钱 现在,设法帮1万人解决这个问题 问题解决方法 基本原则: 理性判断,系统思考,可视化呈现 步骤: 发现问题的本质...
  • 你必须知道的261个Java语言问题.pdf

    千次下载 热门讨论 2012-12-12 21:52:47
    你必须知道的261个Java语言问题给我们介绍了在学习Java的过程中,我们会遇到的261个问题,并提出了应对的建议。通过阅读本书,可以让你的编程能力有一个实质性的提高。
  • “代理服务出现问题,或者地址有误“解决方案

    万次阅读 多人点赞 2021-01-05 15:10:58
    打开浏览器,突然显示"代理服务器出现问题,或地址有误",但此时我的网络是正常的,QQ微信都可以正常使用,只有浏览器出现了这种错误,火狐浏览器和谷歌浏览器都这样。 我尝试ping命令,也是正常的。 上网查了解决...
  • 什么都必须加以解决? 数据链路层的三个基本问题:封装成帧、透明传输、差错检测。 ⑴封装成帧就是在一段数据前后分别添加首部和尾部。接收端以便从收到的比特流中识别帧的开始与结束,帧定界是分组交换的必然...
  • 微信小程序商城15天从零实战课程

    万人学习 2019-02-15 17:43:42
    讲解微信商城小程序界面设计和程序设计所涉及的所有知识点,包括其中用到的组件知识,API函数知识点,微信小程序前端开发基础知识点,实战将所学的知识点应用到商城小程序中;包括商城首页、轮播广告、产品菜单、...
  • 教你玩转excel教程

    万人学习 2015-07-17 09:43:25
    教你玩转excel教程
  • NP困难问题的理解

    万次阅读 2011-03-24 21:51:00
     什么是非确定性问题呢?有些计算问题是确定性的,比如加减乘除之类,你只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有
  • YOLO实战:训练自己的手势识别模型

    千人学习 2020-01-16 15:08:21
    本课程主要向大家讲解如何基于YOLO网络的精简版本tiny-yolo训练手势识别模型,从图片数据采集,图片标注,网络参数修改,模型训练,模型测试等,项目中用到的标注好的...想合作或有什么问题也可以在csdn上给我发私信。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,808,853
精华内容 5,523,541
关键字:

什么问题