用java写一个程序爬取一个网页的内容

要爬取http://epaper.632news.com/zzrb/html/2016-06/07/node_2.htm这个页面,要整个页面的内容,用java程序

2个回答

 package com.hanxb.crawler;

import java.util.*;
import java.net.*;
import java.io.*;
import java.util.regex.*;

// 搜索Web爬行者
public class NativeCrawler implements Runnable {

    /*
     * disallowListCache缓存robot不允许搜索的URL。 
     * Robot协议在Web站点的根目录下设置一个robots.txt文件, 规定站点上的哪些页面是限制搜索的。 
     * 搜索程序应该在搜索过程中跳过这些区域,下面是robots.txt的一个例子: 
     * # robots.txt for
     * http://somehost.com/ User-agent: * Disallow: /cgi-bin/ Disallow: /registration 
     * # /Disallow robots on registration page Disallow: /login
     */
    private HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, ArrayList<String>>();

    ArrayList<String> errorList = new ArrayList<String>();// 错误信息

    ArrayList<String> result = new ArrayList<String>(); // 搜索到的结果
    public ArrayList<String> getResult() {
        return result;
    }

    String startUrl;// 开始搜索的起点
    int maxUrl;// 最大处理的url数
    String searchString;// 要搜索的字符串(英文)

    boolean caseSensitive = false;// 是否区分大小写
    boolean limitHost = false;// 是否在限制的主机内搜索

    public NativeCrawler(String startUrl, int maxUrl, String searchString) {
        this.startUrl = startUrl;
        this.maxUrl = maxUrl;
        this.searchString = searchString;
    }

    public void run() {// 启动搜索线程
        crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
    }

    // 执行实际的搜索操作
    public ArrayList<String> crawl(String startUrl, int maxUrls,
            String searchString, boolean limithost, boolean caseSensitive) {

        System.out.println("searchString=" + searchString);

        HashSet<String> crawledList = new HashSet<String>();
        LinkedHashSet<String> toCrawlList = new LinkedHashSet<String>();

        if (maxUrls < 1) {
            errorList.add("Invalid Max URLs value.");
            System.out.println("Invalid Max URLs value.");
        }

        if (searchString.length() < 1) {
            errorList.add("Missing Search String.");
            System.out.println("Missing search String");
        }

        if (errorList.size() > 0) {
            System.out.println("err!!!");
            return errorList;
        }

        // 从开始URL中移出www
        startUrl = removeWwwFromUrl(startUrl);

        toCrawlList.add(startUrl);
        while (toCrawlList.size() > 0) {

            if (maxUrls != -1) {
                if (crawledList.size() == maxUrls) {
                    break;
                }
            }

            // Get URL at bottom of the list.
            String url = toCrawlList.iterator().next();

            // Remove URL from the to crawl list.
            toCrawlList.remove(url);

            // Convert string url to URL object.
            URL verifiedUrl = verifyUrl(url);

            // Skip URL if robots are not allowed to access it.
            if (!isRobotAllowed(verifiedUrl)) {
                continue;
            }

            // 增加已处理的URL到crawledList
            crawledList.add(url);

            String pageContents = downloadPage(verifiedUrl);
            if (pageContents != null && pageContents.length() > 0) {
                // 从页面中获取有效的链接
                ArrayList<String> links = retrieveLinks(verifiedUrl,
                        pageContents, crawledList, limitHost);

                toCrawlList.addAll(links);

                if (searchStringMatches(pageContents, searchString,
                        caseSensitive)) {
                    result.add(url);
                    System.out.println(url);
                }
            }

        }
        return result;
    }

    private String downloadPage(URL pageUrl) {
        try {
            // Open connection to URL for reading.
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    pageUrl.openStream()));

            // Read page into buffer.
            String line;
            StringBuffer pageBuffer = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                pageBuffer.append(line);
            }

            return pageBuffer.toString();
        } catch (Exception e) {
        }

        return null;
    }

    // 在Web页面的内容中,判断是否存在指定的字符串
    private boolean searchStringMatches(String pageContents,
            String searchString, boolean caseSensitive) {
        String searchContents = pageContents;
        if (!caseSensitive) {// 如果不区分大小写
            searchContents = pageContents.toLowerCase();
        }

        Pattern p = Pattern.compile("[\\s]+");
        String[] terms = p.split(searchString);
        for (int i = 0; i < terms.length; i++) {
            if (caseSensitive) {
                if (searchContents.indexOf(terms[i]) == -1) {
                    return false;
                }
            } else {
                if (searchContents.indexOf(terms[i].toLowerCase()) == -1) {
                    return false;
                }
            }
        }

        return true;
    }

    // 检测URL格式
    private URL verifyUrl(String url) {
        // 只处理HTTPS URLs.
        if (!url.toLowerCase().startsWith("https://"))
            return null;

        URL verifiedUrl = null;
        try {
            verifiedUrl = new URL(url);
        } catch (Exception e) {
            return null;//not needed
        }

        return verifiedUrl;
    }

    // 检测robot是否允许访问给出的URL.
    private boolean isRobotAllowed(URL urlToCheck) {
        String host = urlToCheck.getHost().toLowerCase();// 获取给出RUL的主机
        // System.out.println("主机="+host);

        // 获取主机不允许搜索的URL缓存
        ArrayList<String> disallowList = disallowListCache.get(host);

        // 如果还没有缓存,下载并缓存。
        if (disallowList == null) {
            disallowList = new ArrayList<String>();
            try {
                URL robotsFileUrl = new URL("http://" + host + "/robots.txt");
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(robotsFileUrl.openStream()));

                // 读robot文件,创建不允许访问的路径列表。
                String line;
                while ((line = reader.readLine()) != null) {
                    if (line.indexOf("Disallow:") == 0) {// 是否包含"Disallow:"
                        String disallowPath = line.substring("Disallow:"
                                .length());// 获取不允许访问路径

                        // 检查是否有注释。
                        int commentIndex = disallowPath.indexOf("#");
                        if (commentIndex != -1) {
                            disallowPath = disallowPath.substring(0,
                                    commentIndex);// 去掉注释
                        }

                        disallowPath = disallowPath.trim();
                        disallowList.add(disallowPath);
                    }
                }

                // 缓存此主机不允许访问的路径。
                disallowListCache.put(host, disallowList);
            } catch (Exception e) {
                return true; // web站点根目录下没有robots.txt文件,返回真
            }
        }

        String file = urlToCheck.getFile();
        // System.out.println("文件getFile()="+file);
        for (int i = 0; i < disallowList.size(); i++) {
            String disallow = disallowList.get(i);
            if (file.startsWith(disallow)) {
                return false;
            }
        }

        return true;
    }

    // 从URL中去掉"www"
    private String removeWwwFromUrl(String url) {
        int index = url.indexOf("://www.");
        if (index != -1) {
            return url.substring(0, index + 3) + url.substring(index + 7);
        }

        return url;
    }

    // 解析页面并找出链接
    private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
            HashSet<String> crawledList, boolean limitHost) {
        // 用正则表达式编译链接的匹配模式。
        Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(.*?)[\"|>]",
                Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(pageContents);

        ArrayList<String> linkList = new ArrayList<String>();
        while (m.find()) {
            String link = m.group(1).trim();

            if (link.length() < 1) {
                continue;
            }

            // 跳过链到本页面内链接。
            if (link.charAt(0) == '#') {
                continue;
            }

            if (link.indexOf("mailto:") != -1) {
                continue;
            }

            if (link.toLowerCase().indexOf("javascript") != -1) {
                continue;
            }

            if (link.indexOf("://") == -1) {
                if (link.charAt(0) == '/') {// 处理绝对地
                    link = "http://" + pageUrl.getHost() + ":"
                            + pageUrl.getPort() + link;
                } else {
                    String file = pageUrl.getFile();
                    if (file.indexOf('/') == -1) {// 处理相对地址
                        link = "http://" + pageUrl.getHost() + ":"
                                + pageUrl.getPort() + "/" + link;
                    } else {
                        String path = file.substring(0,
                                file.lastIndexOf('/') + 1);
                        link = "http://" + pageUrl.getHost() + ":"
                                + pageUrl.getPort() + path + link;
                    }
                }
            }

            int index = link.indexOf('#');
            if (index != -1) {
                link = link.substring(0, index);
            }

            link = removeWwwFromUrl(link);

            URL verifiedLink = verifyUrl(link);
            if (verifiedLink == null) {
                continue;
            }

            /* 如果限定主机,排除那些不合条件的URL */
            if (limitHost
                    && !pageUrl.getHost().toLowerCase()
                            .equals(verifiedLink.getHost().toLowerCase())) {
                continue;
            }

            // 跳过那些已经处理的链接.
            if (crawledList.contains(link)) {
                continue;
            }

            linkList.add(link);
        }

        return (linkList);
    }

    // 主函数
    public static void main(String[] args) {
        if (args.length != 3) {
            System.out
                    .println("Usage:java NativeCrawler startUrl maxUrl searchString");
            return;
        }
        int max = Integer.parseInt(args[1]);
        NativeCrawler crawler = new NativeCrawler(args[0], max, args[2]);
        Thread search = new Thread(crawler);
        System.out.println("Start searching...");
        System.out.println("result:");
        search.start();

    }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
IBM中国研发中心面试题,如何用Java写一个程序达到对象深浅克隆的效果?不能用API
IBM中国研发中心面试题,如何用Java写一个程序达到对象深浅克隆的效果?不能用API。来吧,大家发表意见,全分奉上。
java如何爬取例如优酷视频网站中的视频资源链接并下载
java如何爬取例如优酷视频网站中的视频资源链接并下载?或者其他的一些视频网站,有没有一个比较合理的爬取方式。注意是用java
如何用Java写一个控制台程序
如何用Java写一个控制台程序,放在服务器上一直运行,然后定时发送例如邮件等操作
java 爬虫爬取网页,,,,
我要使用java爬虫爬取一个网站, 那个网站需要模拟登陆, 用的是第三方的验证码, 而且验证码是点击验证图片后由多张图片组成的。请问一下各位大神这个该怎么破
如何实现用Java写一个模拟ATM机程序
如何用Java写一个模拟ATM机程序,完全没有思路,谁给我源码让我提供参考啊,拜托大神了⋯⋯⋯⋯
想写一个爬虫程序,用什么框架比较好
RT 想用java写个爬虫 主要想爬取微博的数据 求指教
java通过jsoup怎么爬取动态加载的 内容
要爬取的url:http://www.zdic.net/c/cipy/ci/?z=啊 要爬取的标签:![图片说明](https://img-ask.csdn.net/upload/201804/10/1523348192_354488.png) 但是在控制台的Elements里可以看到,如![图片说明](https://img-ask.csdn.net/upload/201804/10/1523348522_783648.png) 后来发现 这些数据来源于一个url请求:![图片说明](https://img-ask.csdn.net/upload/201804/10/1523348564_102493.png) 该怎么爬取这个zdiv这个标签的内容,,,
JAVA网页数据爬取,保存为xml
各位好,我想爬取网页上的数据用作绘图,但是现在只能将网页代码下载下来不知道该怎么提取?用JAVA写的。希望可以知道如何从网站上爬取数据,并保存为xml 的格式。在此谢谢![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/1.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif)
java爬虫爬取插件数据
请问一下各位大神, java爬虫可以爬取插件数据么? 求各位大神指点一下。 可以的话能把思路告诉我么?
java 做一个QQ爬虫,爬QQ用户的基本信息
java 做一个QQ爬虫,爬取到QQ的帐号 呢称 ,性别,姓名,城市等等。希望各位大侠帮忙
Java语言,计算1000以内的水仙花数,具体用一个程序写出来,要怎么写
Java语言,计算1000以内的水仙花数,具体用一个程序写出来,要怎么写
如何用Java爬虫获取网页中的文本内容?
如何用Java爬虫获取一个网页中的文本内容(不是源代码,是内容)? 求代码!!!!
Java语言编写一个程序可以实现数字和英文的转换,这个程序怎么写呢
Java语言编写一个程序可以实现数字和英文的转换,这个程序怎么写呢
Java 模拟登陆 爬取网页
请教大神们, 我现在想爬取Kroger.com上面一些商品信息,但需要登录,我可以手动登陆后,把得到的cookie设置在Java里直接跳过登录访问吗
Java爬虫在爬取动态生成数据的网页时怎样效率最高?
大佬们好,我目前刚刚开始研究Java爬虫。在尝试爬取通过Javascript生成数据的网页时,我使用了HTMLUnit去模拟JS的各种操作,但是即便使用了多线程,也觉得效率很一般。希望各位大佬提供一个最高效的爬虫方法。感谢!
用python写爬虫和用Java写爬虫的区别是什么?
为什么大多数都用python写爬虫 python有爬虫库吗?
我有一个java游戏小程序使用java.awt写的。如何把它翻译成用javafx实现?
我有一个java游戏小程序使用java.awt写的。如何把它翻译成用javafx实现?
用java写一个模拟modbus协议从设备的程序该怎么写?
用java写一个模拟modbus协议从设备的程序该怎么开始呢,是使用modbus4j.jar和 seroUtils.jar, RXTXcomm.jar这些包么? 网上有用的资源好像很少,有没有大神接触过类似的?可以提供一下资源么?源代码,示例什么的?还有seroUtils.jar有没有源代码?或者给我一些其他的提示?真的不知如何下手。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
相关热词 c#委托 逆变与协变 c#新建一个项目 c#获取dll文件路径 c#子窗体调用主窗体事件 c# 拷贝目录 c# 调用cef 网页填表c#源代码 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天
立即提问