que componente da arquitetura oracle é a combinação dos processos em segundo plano e estruturas de memória?
estamos falando dos buffers. na ciência da computação , um buffer de dados (ou apenas buffer ) é uma região de um armazenamento de memória física usado para armazenar temporariamente dados enquanto estão sendo movidos de um local para outro. normalmente, os dados são armazenados em um buffer quando são recuperados de um dispositivo de entrada (como um microfone) ou imediatamente antes de serem enviados para um dispositivo de saída (como alto-falantes). no entanto, um buffer pode ser usado ao mover dados entre processosdentro de um computador. isso é comparável aos buffers em telecomunicações. os buffers podem ser implementados em um local fixo de memória no hardware - ou usando um buffer de dados virtual no software, apontando para um local na memória física.a maioria dos buffers é implementada em software , que normalmente usa a ram mais rápida para armazenar dados temporários, devido ao tempo de acesso muito mais rápido comparado às unidades de disco rígido
é natural que com o tempo o sistema operacional passe a consumir mais recursos. isso acontece principalmente por dois motivos:

arquivos temporários & cache são acumulados com o tempo;

muitos pacotes (e serviços) posteriormente instalados que consomem mais memória e mais processamento, consecutivam… <p>um sistema unix consiste em várias partes ou camadas, como eu gostaria de chamá-las.</p><p>para iniciar um sistema, um programa chamado carregador de inicialização fica no primeiro setor de uma partição do disco rígido. ele é iniciado pelo sistema e, por sua vez, localiza o kernel do sistema operacional e carrega-o.</p><p><strong> camadas </strong></p><ol> <li> <p>o kernel. este é o programa central iniciado pelo gerenciador de inicialização. ele faz a interação básica de hardware do sistema (disco, memória, vídeo, som) e oferece um ambiente virtual no qual ele pode iniciar programas. o kernel também envia todos os drivers que lidam com todas as pequenas diferenças entre os dispositivos de hardware. para o mundo exterior (as camadas mais altas), cada classe de dispositivos parece se comportar exatamente da mesma maneira consistente - a qual, por sua vez, os programas podem desenvolver.</p> </li> <li> <p>subsistemas em segundo plano. existem apenas programas regulares, que ficam fora do seu caminho. eles lidam com coisas como login remoto, fornecem um barramento central de mensagens e executam ações com base em eventos de hardware/rede. por exemplo, descoberta bluetooth, gerenciamento wifi, etc. quaisquer serviços de rede (servidor de arquivos, servidor de impressão, servidor web) também vivem nesse nível. nos sistemas unix, esses são apenas programas normais.</p> </li> <li> <p>as ferramentas de linha de comando. todos esses são pequenos programas que podem ser iniciados para edição de texto, download de arquivos ou administração do sistema. neste ponto, um sistema unix é totalmente utilizável para administradores de sistema. no windows, essa camada realmente não existe mais.</p> </li> <li> <p>a interface gráfica do usuário. estes também são apenas programas, a única diferença é que eles desenham janelas na tela em vez de escrever texto. isso facilita o uso do sistema para usuários regulares.</p> </li> </ol><p>qualquer serviço ou evento passará de baixo para cima.</p><p><strong> bibliotecas - a plataforma comum </strong></p><p>os programas fazem muitas coisas comuns, como exibir uma janela, desenhar coisas na tela ou baixar um arquivo. essas coisas são as mesmas para vários programas, portanto, esse código é colocado em arquivos "biblioteca" separados (arquivos <code>.so</code> - significando objeto compartilhado). a biblioteca pode ser compartilhada entre todos os programas.</p><p>para cada coisa imaginável, há uma biblioteca. existe um para ler/gravar arquivos png. há um para arquivos jpeg, para leitura de xml, criptografia, reprodução de vídeo e assim por diante.</p><p>no linux, as bibliotecas comuns para desenvolvedores de aplicativos são qt e gtk. essas bibliotecas usam bibliotecas de nível inferior internamente para suas necessidades específicas, enquanto expõem sua funcionalidade de uma maneira agradável e consistente e concisa para que os desenvolvedores de aplicativos criem aplicativos ainda mais rapidamente.</p><p>as bibliotecas fornecem a plataforma de aplicativos, na qual os programadores podem criar aplicativos de usuário final para um sistema operacional. quanto mais bibliotecas de alta qualidade um sistema fornece, menos código um programador precisa escrever para criar um programa bonito.</p><p>algumas bibliotecas podem ser usadas em diferentes sistemas operacionais (por exemplo, qt é), outras são realmente especificamente vinculadas a um sistema operacional. isso restringirá seu programa para poder executar apenas nessa plataforma.</p><p><strong> comunicação entre processos </strong></p><p>um terceiro componente de um sistema operacional é a maneira como os programas podem se comunicar. estes são os mecanismos de comunicação entre processos (ipc). estes existem em vários sabores, p. um pedaço de memória compartilhada ou um pequeno canal é configurado entre dois programas para trocar dados. há também um barramento de mensagens central no qual cada programa pode postar uma mensagem e receber uma resposta. isso é usado para comunicação global, onde não se sabe qual programa pode responder.</p><p><strong> das bibliotecas aos sistemas operacionais </strong></p><p>com bibliotecas, ipc e o kernel instalado, os programadores podem criar todos os tipos de aplicativos para serviços do sistema, administração de usuários, configuração, administração, trabalho de escritório, entretenimento, etc.) isso forma o conjunto completo que usuários iniciantes reconhecem como o "sistema operacional".</p><p>nos sistemas unix/linux, todos os serviços são apenas programas. todas as ferramentas de administração do sistema são apenas programas. todos eles fazem o seu trabalho e podem ser encadeados. resumi muitos dos principais programas em <a href="http://codingdomain.com/linux/sysadmin/">http://codingdomain.com/linux/sysadmin/</a> </p><hr><p><strong> peças distinguíveis com o windows </strong></p><p>o unix é principalmente um sistema de programas, arquivos e permissões restritas. muitas complexidades são evitadas, tornando-o um sistema poderoso, embora pareça fácil.</p><p>em detalhes, estes são os princípios que podem ser encontrados nos sistemas unix/linux:</p><ul> <li> <p>existem maneiras uniformes de acessar informações. ("tudo é apenas um arquivo"). você pode abrir um arquivo, soquete de rede, ipc, parâmetros do kernel e bloquear um dispositivo como um arquivo. daí a aparência dos sistemas de arquivos virtuais em/dev,/sys e/proc. a única api você precisa sempre de <code>open</code>, <code>read</code> e <code>close</code>.</p> </li> <li> <p>o sistema subjacente é transparente. todo programa opera sob as mesmas regras. ao contrário do windows, não há diferença artificial entre um "programa de console", "programa gui" ou "serviço em segundo plano". são todos apenas programas, que fazem coisas diferentes. todos eles também podem ser observados, analisados ​​e depurados da mesma maneira.</p> </li> <li> <p>as configurações são legíveis, editáveis ​​e podem ser anotadas com comentários. eles geralmente têm um formato no estilo ini, mas podem usar um formato personalizado para as necessidades desse aplicativo. por serem apenas arquivos, eles podem ser copiados para outros sistemas, arquivados ou armazenados em backup com ferramentas padrão.</p> </li> <li> <p>não existem aplicativos grandes "faça tudo de uma vez". o mantra é "faça uma coisa, faça bem". as ferramentas de linha de comando podem ser encadeadas e, juntas, poderosas. serviços separados (por exemplo, smtp, imap e pop e login) são subprogramas separados, evitando problemas complexos de código e segurança entrelaçados. ambientes de desktop complexos delegam trabalho duro a programas individuais.</p> </li> <li> <p><code>fork()</code>. novos programas são iniciados por um programa existente que é clonado. o clone configura tudo (por exemplo, identificadores de arquivo) e, opcionalmente, se substitui pelo novo código do programa. isso torna muito fácil aplicar as mesmas configurações e restrições de segurança a novos programas, compartilhar memória ou configurar um mecanismo ipc. o custo de iniciar um processo também é muito baixo.</p> </li> <li> <p>o sistema de arquivos é uma árvore, na qual outras partições de disco e compartilhamentos de rede podem ser montados. novamente, existe uma maneira universal de acessar dados. locais comuns do sistema (por exemplo, <code>/usr</code> podem ser facilmente montados como compartilhamento de rede.</p> </li> <li> <p>o sistema é construído para privilégios baixos do usuário. após o login, todos os usuários (exceto root) ficam confinados em seus próprios recursos, executando apenas aplicativos e arquivos. os serviços de rede reduzem seus privilégios o mais rápido possível. existe uma maneira clara e clara de obter mais privilégios ou pedir a alguém para executar um trabalho privilegiado em seu nome. todas as outras chamadas são limitadas pelas restrições e limitações do programa.</p> </li> <li> <p>todo programa armazena configurações em um arquivo/pasta oculto do diretório inicial do usuário. nenhum programa tenta gravar um arquivo de configuração global.</p> </li> <li> <p>um favor em relação aos mecanismos de comunicação descritos abertamente sobre mecanismos secretos ou mecanismos 1-para-1 específicos. outros fornecedores e desenvolvedores de software são incentivados a seguir a mesma especificação, para que as coisas possam ser facilmente conectadas, trocadas e, no entanto, permanecerem fracamente acopladas.</p> </li> </ul> eu não conheço a sintaxe oracle, mas deve ser algo assim:porque você precisa concatenar a variável t... não só é possível como você deve combinar tecnologias de front e back end, se você viu os cursos de spring da plataforma deve ter visto a utilização de bootstrap(uma biblioteca front-end) em projetos ... <p>a idéia aqui é que a maioria de nós já <em> já </em> saiba <em> a maioria </em> do que está nesta lista. mas pode haver apenas um ou dois itens que você realmente não analisou antes, que não entende completamente, ou talvez nunca tenha ouvido falar.</p><p><strong> interface e experiência do usuário </strong></p><ul> <li>esteja ciente de que os navegadores implementam os padrões de maneira inconsistente e verifique se o site funciona razoavelmente bem em todos os principais navegadores. em um teste mínimo com relação a um <a href="https://en.wikipedia.org/wiki/gecko\_%28layout\_engine%29">gecko</a> engine recente ( <a href="http://firefox.com/">firefox</a> ), um mecanismo webkit ( <a href="http://www.apple.com/safari/">safari</a> e alguns navegadores móveis) , <a href="http://www.google.com/chrome">chrome</a> , seus navegadores <a href="https://en.wikipedia.org/wiki/internet\_explorer">ie suportados</a> (aproveite as <a href="http://www.microsoft.com/downloads/details.aspx?familyid=21eabb90-958f-4b64-b5f1-73d0a413c8ef&amp;displaylang=en">imagens vpc de compatibilidade de aplicativos</a> ) e <a href="http://www.opera.com/">opera</a> . considere também como <a href="http://www.browsershots.org">browsers processam seu site</a> / em diferentes sistemas operacionais.</li> <li>considere como as pessoas podem usar o site que não seja dos principais navegadores: telefones celulares, leitores de tela e mecanismos de pesquisa, por exemplo. - algumas informações de acessibilidade: <a href="http://www.w3.org/wai/"> wai </a> e <a href="http://www.section508.gov/">section508</a> , desenvolvimento móvel: <a href="http://mobiforge.com/">mobiforge</a> .</li> <li>preparo: como implantar atualizações sem afetar seus usuários. tenha um ou mais ambientes de teste ou teste disponíveis para implementar alterações na arquitetura, no código ou no conteúdo abrangente e garantir que eles possam ser implantados de maneira controlada sem quebrar nada. tenha uma maneira automatizada de implantar alterações aprovadas no site ativo. isso é implementado de maneira mais eficaz em conjunto com o uso de um sistema de controle de versão (git, subversion, etc.) e um mecanismo de compilação automatizado (ant, nant, etc.).</li> <li>não exiba erros hostis diretamente para o usuário.</li> <li>não coloque os endereços de email dos usuários em texto sem formatação, pois eles receberão spam até a morte.</li> <li>adicione o atributo \_<code>rel="nofollow"</code>\_ aos links gerados pelo usuário <a href="https://en.wikipedia.org/wiki/nofollow">para evitar spam</a> .</li> <li> <a href="http://www.codinghorror.com/blog/archives/001228.html">crie limites bem considerados no seu site</a> - isso também pertence a segurança.</li> <li>aprenda a fazer <a href="https://en.wikipedia.org/wiki/progressive\_enhancement">aprimoramento progressivo</a> .</li> <li> <a href="https://en.wikipedia.org/wiki/post/redirect/get">redirecione após um post</a> se esse post foi bem-sucedido, para impedir que uma atualização seja enviada novamente.</li> <li>não se esqueça de levar em consideração a acessibilidade. é sempre uma boa ideia e, em determinadas circunstâncias, é um <a href="http://www.section508.gov/">requisito legal</a> . <a href="http://www.w3.org/wai/intro/aria">wai-aria</a> e <a href="http://www.w3.org/tr/wcag20/">wcag 2</a> são bons recursos nessa área.</li> <li>leia <a href="http://www.sensible.com/dmmt.html">não me faça pensar</a> .</li> </ul><p><strong> segurança </strong></p><ul> <li>é muito difícil de digerir, mas o guia de desenvolvimento <a href="http://www.owasp.org/index.php/category:owasp\_guide\_project">owasp</a> cobre a segurança do site de cima para baixo.</li> <li>saiba mais sobre a injeção, especialmente <a href="https://en.wikipedia.org/wiki/sql\_injection">sql injection</a> e como evitá-la.</li> <li>nunca confie na entrada do usuário, nem em qualquer outra coisa que esteja presente na solicitação (que inclui cookies e valores ocultos do campo do formulário!).</li> <li>hash senhas usando <a href="https://security.stackexchange.com/q/21263/396">salt</a> / e use sais diferentes para suas linhas para evitar ataques do rainbow. use um algoritmo de hash lento, como bcrypt (tempo testado) ou scrypt (ainda mais forte, mas mais recente) ( <a href="http://www.tarsnap.com/scrypt.html">1</a> , <a href="http://it.slashdot.org/comments.pl?sid=1987632&amp;cid=35149842">2</a> ), para armazenar senhas. ( <a href="http://codahale.com/how-to-safely-store-a-password/">como armazenar com segurança uma senha</a> ). o <a href="https://security.stackexchange.com/q/7689/396">nist também aprova o pbkdf2 para senhas de hash</a> "e é <a href="https://security.stackexchange.com/a/2136/396">fips aprovado no .net</a> (mais informações <a href="https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords">aqui</a> ) . <em> evite </em> usar md5 ou a família sha diretamente.</li> <li> <a href="https://stackoverflow.com/questions/1581610/how-can-i-store-my-users-passwords-safely/1581919#1581919">não tente criar seu próprio sistema de autenticação sofisticado</a> . é uma coisa tão fácil cometer erros de maneiras sutis e não testáveis ​​e você nem saberia até <em> depois de </em> ser invadido.</li> <li>conheça as <a href="https://www.pcisecuritystandards.org/">regras para o processamento de cartões de crédito</a> . ( <a href="https://stackoverflow.com/questions/51094/payment-processors-what-do-i-need-to-know-if-i-want-to-accept-credit-cards-on-m">veja também esta pergunta</a> )</li> <li>use <a href="http://www.mozilla.org/projects/security/pki/nss/ssl/draft302.txt">ssl/tls</a> / <a href="https://en.wikipedia.org/wiki/session\_hijacking#prevention"> https </a> para sites em que dados confidenciais são inseridos (como credenciais, informações de identificação pessoal, informações do cartão de crédito). <a href="https://letsencrypt.org">let's encrypt</a> é uma autoridade de certificação gratuita que pode ajudar.</li> <li> <a href="https://en.wikipedia.org/wiki/session\_hijacking#prevention">impedir o seqüestro de sessão</a> .</li> <li>evite <a href="https://en.wikipedia.org/wiki/cross-site\_scripting">scripts entre sites</a> (xss).</li> <li>evite <a href="https://en.wikipedia.org/wiki/cross-site\_request\_forgery">falsificações de solicitação entre sites</a> (csrf).</li> <li>evite <a href="https://en.wikipedia.org/wiki/clickjacking">clickjacking</a> .</li> <li>mantenha seu (s) sistema (s) atualizado (s) com as últimas correções.</li> <li>verifique se as informações de conexão do banco de dados estão protegidas.</li> <li>mantenha-se informado sobre as mais recentes técnicas de ataque e vulnerabilidades que afetam sua plataforma.</li> <li>leia <a href="https://code.google.com/archive/p/browsersec/">manual de segurança do navegador google</a> .</li> <li>leia <a href="https://rads.stackoverflow.com/amzn/click/com/0470170778">manual do hacker de aplicativos da web</a> .</li> <li>considere <a href="https://en.wikipedia.org/wiki/principle\_of\_least\_privilege">o princípio do menor privilégio</a> . tente executar o servidor de aplicativos <a href="https://security.stackexchange.com/questions/47576/do-simple-linux-servers-really-need-a-non-root-user-for-security-reasons">como não raiz</a> . ( <a href="http://tomcat.apache.org/tomcat-8.0-doc/security-howto.html#non-tomcat\_settings">exemplo do tomcat</a> )</li> <li>coloque \_<code>rel="noopener noreferrer"</code>\_ em todos os links fornecidos pelo usuário com \_<code>target="\_blank"</code>\_ para impedir que o javascript na página de destino redirecione sua página para outro lugar, como uma página de login falsa. <a href="https://dev.to/phishing">mais informações</a> </li> <li>considere usar uma <a href="https://csp.withgoogle.com/docs/index.html">política de segurança de conteúdo estrita</a> .</li> </ul><p><strong> desempenho </strong></p><ul> <li>implemente o cache, se necessário, entenda e use <a href="http://www.mnot.net/cache\_docs/">http caching</a> corretamente, bem como <a href="http://www.w3.org/tr/2011/wd-html5-20110525/offline.html">html5 manifest</a> .</li> <li>otimizar imagens - não use uma imagem de 20 kb para um fundo repetitivo.</li> <li>compactar conteúdo para velocidade, consulte <a href="https://www.smashingmagazine.com/2016/10/next-generation-server-compression-with-brotli/">brotli</a> , <a href="http://developer.yahoo.com/performance/rules.html#gzip">gzip/deflate</a> (<strike> <a href="https://stackoverflow.com/questions/1574168/gzip-vs-deflate-zlib-revisited">deflate é melhor</a> </strike>).</li> <li>combine/concatene várias folhas de estilo ou vários arquivos de script para reduzir o número de conexões do navegador e melhorar a capacidade do gzip para compactar duplicações entre arquivos.</li> <li>dê uma olhada no site <a href="http://developer.yahoo.com/performance/">yahoo exceptional performance</a> , muitas ótimas diretrizes, incluindo a melhoria do desempenho do front-end e sua <a href="http://developer.yahoo.com/yslow/">yslow</a> ferramenta (requer firefox, safari, chrome ou opera). além disso, <a href="https://developers.google.com/speed/docs/best-practices/rules\_intro">velocidade da página do google</a> (use com <a href="https://developers.google.com/speed/pagespeed/insights\_extensions">extensão do navegador</a> ) é outra ferramenta para criação de perfil de desempenho e otimiza suas imagens também.</li> <li><strike>use <a href="http://alistapart.com/articles/sprites">css image sprites</a> para imagens relacionadas pequenas, como barras de ferramentas (consulte o ponto "minimizar solicitações http")</strike></li> <li>use <a href="https://24ways.org/2014/an-overview-of-svg-sprite-creation-techniques/">sprites de imagem svg</a> para pequenas imagens relacionadas, como barras de ferramentas. a coloração svg é um pouco complicada. você pode ler sobre isso <a href="http://tympanus.net/codrops/2015/07/16/styling-svg-use-content-css/">aqui</a> .</li> <li>sites ocupados devem considerar <a href="http://developer.yahoo.com/performance/rules.html#split">dividir componentes entre domínios</a> . especificamente...</li> <li>o conteúdo estático (ou seja, imagens, css, javascript e, geralmente, o conteúdo que não precisa de acesso a cookies) deve ir em um domínio separado <em> <a href="http://blog.stackoverflow.com/2009/08/a-few-speed-improvements/">que não usa cookies</a> </em>, porque todos os cookies de um domínio e seus subdomínios são enviados com todas as solicitações para o domínio e seus subdomínios. uma boa opção aqui é usar uma rede de entrega de conteúdo (cdn), mas considere o caso em que essa cdn pode falhar incluindo cdns alternativas ou cópias locais que podem ser veiculadas.</li> <li>minimize o número total de solicitações http necessárias para um navegador renderizar a página.</li> <li>escolha um <a href="http://garann.github.io/template-chooser/">template engine</a> e renderize/pré-compile usando os executores de tarefas como gulp ou grunt</li> <li>verifique se há um arquivo \_<code>favicon.ico</code>\_ na raiz do site, ou seja, \_<code>/favicon.ico</code>\_. <a href="http://mathiasbynens.be/notes/rel-shortcut-icon">os navegadores solicitarão automaticamente</a> , mesmo que o ícone não seja mencionado no html. se você não tiver um \_<code>/favicon.ico</code>\_, isso resultará em muitos 404s, consumindo a largura de banda do servidor.</li> </ul><p><strong> seo (otimização de mecanismos de pesquisa) </strong></p><ul> <li>use urls "compatíveis com o mecanismo de pesquisa", ou seja, use \_<code>example.com/pages/45-article-title</code>\_ em vez de \_<code>example.com/index.php?page=45</code>\_</li> <li>ao usar \_<code>#</code>\_ para conteúdo dinâmico, altere \_<code>#</code>\_ para \_<code>#!</code>\_ e, em seguida, no servidor \_<code>$\_request["\_escaped\_fragment\_"]</code>\_, é o que o googlebot usa em vez de \_<code>#!</code>\_. em outras palavras, \_<code>./#!page=1</code>\_ se torna \_<code>./?\_escaped\_fragments\_=page=1</code>\_. além disso, para usuários que possam estar usando o ff.b4 ou o chromium, <code>history.pushstate({"foo":"bar"}, "about", "./?page=1");</code> é um ótimo comando. portanto, mesmo que a barra de endereço tenha mudado, a página não é recarregada. isso permite que você use \_<code>?</code>\_ em vez de \_<code>#!</code>\_ para manter o conteúdo dinâmico e também informar ao servidor quando você enviar por e-mail o link que estamos após esta página, e o ajax não precisa para fazer outro pedido extra.</li> <li>não use links que digam <a href="https://ux.stackexchange.com/questions/12100/why-shouldnt-we-use-the-word-here-in-a-textlink">"clique aqui"</a> . você está desperdiçando uma oportunidade de seo e isso torna as coisas mais difíceis para as pessoas com leitores de tela.</li> <li>tenha um <a href="http://www.sitemaps.org/">xml sitemap</a> , de preferência no local padrão \_<code>/sitemap.xml</code>\_.</li> <li>use <a href="http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html">\_<code>&lt;link rel="canonical" ... /&gt;</code>\_</a> quando você tiver vários urls que apontam para o mesmo conteúdo, esse problema também pode ser solucionado em <a href="http://www.google.com/webmasters/">ferramentas do google para webmasters</a> .</li> <li>use <a href="http://www.google.com/webmasters/">ferramentas para webmasters do google</a> e <a href="http://www.bing.com/toolbox/webmaster">ferramentas para webmasters do bing</a> .</li> <li>instale <a href="http://www.google.com/analytics/">google analytics</a> logo no início (ou uma ferramenta de análise de código aberto como <a href="http://piwik.org/">piwik</a> /).</li> <li>saiba como <a href="https://en.wikipedia.org/wiki/robots\_exclusion\_standard">robots.txt</a> e as aranhas dos mecanismos de pesquisa funcionam.</li> <li>redirecione solicitações (usando \_<code>301 moved permanently</code>\_) solicitando \_<code>www.example.com</code>\_ para \_<code>example.com</code>\_ (ou o contrário) para impedir a divisão da classificação do google entre os dois sites.</li> <li>saiba que pode haver aranhas mal comportadas por aí.</li> <li>se você tiver conteúdo não textual, procure as extensões de mapa do site do google para vídeos, etc. há algumas informações boas sobre isso em <a href="https://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site#167608">tim farley's answer</a> .</li> </ul><p><strong> tecnologia </strong></p><ul> <li>entenda <a href="http://www.ietf.org/rfc/rfc2616.txt"> http </a> e coisas como get, post, sessões, cookies e o que significa ser "sem estado".</li> <li>escreva seu <a href="http://www.w3.org/tr/xhtml1/"> xhtml </a> / <a href="http://www.w3.org/tr/rec-html40/"> html </a> e <a href="http://www.w3.org/tr/css2/"> css </a> de acordo com as especificações <a href="http://www.w3.org/tr/">w3c</a> e certifique-se de que eles <a href="http://validator.w3.org/">validam</a> /. o objetivo aqui é evitar os modos peculiares do navegador e, como bônus, facilitar o trabalho com navegadores não tradicionais, como leitores de tela e dispositivos móveis.</li> <li>entenda como o javascript é processado no navegador.</li> <li>entenda como o javascript, as folhas de estilo e outros recursos usados ​​por sua página são carregados e considere seu impacto no <em> desempenho percebido </em>. agora, é amplamente considerado adequado <a href="https://developer.yahoo.com/blogs/ydn/high-performance-sites-rule-6-move-scripts-bottom-7200.html">mover scripts para o final das páginas</a> das suas páginas, com exceções que normalmente são coisas como aplicativos de análise ou shims html5.</li> <li>entenda como a sandbox javascript funciona, especialmente se você pretende usar iframes.</li> <li>esteja ciente de que o javascript pode e será desativado e que ajax é, portanto, uma extensão, não uma linha de base. mesmo que a maioria dos usuários o deixe ligado agora, lembre-se de que <a href="http://noscript.net/">noscript</a> está se tornando mais popular. embora os robôs de rastreamento modernos suportem a indexação de conteúdo gerado por javascript, considere usar a renderização no servidor para outros robôs ou usuários que desativaram o javascript.</li> <li>aprenda a diferença <a href="http://www.bigoakinc.com/blog/when-to-use-a-301-vs-302-redirect/">entre os redirecionamentos 301 e 302</a> (esse também é um problema de seo).</li> <li>aprenda o máximo possível sobre sua plataforma de implantação.</li> <li>considere usar uma <a href="https://stackoverflow.com/questions/11578819/css-reset-what-exactly-does-it-do">redefinir folha de estilos</a> ou <a href="http://necolas.github.com/normalize.css/">normalize.css</a> .</li> <li>considere estruturas javascript (como <a href="http://jquery.com/">jquery</a> , <a href="http://mootools.net/">mootools</a> , <a href="http://www.prototypejs.org/">prototype</a> , <a href="http://dojotoolkit.org">dojo</a> ou <a href="http://developer.yahoo.com/yui/3/">yui 3</a> ), que ocultará muitas diferenças do navegador ao usar javascript para manipulação de dom.</li> <li>reunindo o desempenho percebido e as estruturas js, considere usar um serviço como a <a href="http://developers.google.com/speed/libraries/devguide">api das bibliotecas do google</a> para carregar estruturas para que um navegador possa usar uma cópia da estrutura que ele já armazenou em cache, em vez de fazer o download de uma cópia duplicada. copiar do seu site.</li> <li>não reinvente a roda. antes de fazer qualquer coisa, procure um componente ou exemplo de como fazê-lo. há 99% de chance de alguém ter feito isso e lançado uma versão oss do código.</li> <li>por outro lado, não comece com 20 bibliotecas antes mesmo de decidir quais são suas necessidades. particularmente na web do lado do cliente, onde quase sempre é mais importante manter as coisas leves, rápidas e flexíveis.</li> </ul><p><strong> correção de erros </strong></p><ul> <li>entenda que você gastará 20% do seu tempo codificando e 80% dele mantendo, portanto, codifique de acordo.</li> <li>configure uma boa solução de relatório de erros.</li> <li>tenha um sistema para as pessoas entrarem em contato com você com sugestões e críticas.</li> <li>documente como o aplicativo funciona para futuras equipes de suporte e pessoas que realizam manutenção.</li> <li>faça backups frequentes! (e verifique se esses backups estão funcionando) tenha uma estratégia de restauração, não apenas uma estratégia de backup.</li> <li>use um sistema de controle de versão para armazenar seus arquivos, como <a href="http://subversion.apache.org/">subversion</a> , <a href="http://mercurial.selenic.com/">mercurial</a> ou <a href="http://git-scm.org">git</a> .</li> <li>não se esqueça de fazer seu teste de aceitação. estruturas como <a href="http://seleniumhq.org/">selenium</a> podem ajudar. especialmente se você automatizar completamente seus testes, talvez usando uma ferramenta de integração contínua, como <a href="http://jenkins-ci.org/">jenkins</a> .</li> <li>verifique se você possui log suficiente usando estruturas como <a href="http://logging.apache.org/log4j/">log4j</a> , <a href="http://logging.apache.org/log4net/">log4net</a> ou <a href="http://log4r.rubyforge.org/">log4r</a> . se algo der errado no seu site ao vivo, você precisará descobrir como.</li> <li>ao fazer o log, certifique-se de capturar as exceções tratadas e não tratadas. relate/analise a saída do log, pois mostrará onde estão os principais problemas em seu site.</li> </ul><p><strong> outros </strong></p><ul> <li>implemente monitoramento e análise do lado do servidor e do cliente (um deve ser proativo em vez de reativo).</li> <li>use serviços como uservoice e intercom (ou qualquer outra ferramenta similar) para manter contato constante com seus usuários.</li> <li>siga <a href="http://nvie.com/about/">vincent driessen</a> 's <a href="http://nvie.com/posts/a-successful-git-branching-model/">git branching model</a> </li> </ul><p>muitas coisas foram omitidas não necessariamente porque não são respostas úteis, mas porque são muito detalhadas, estão fora do escopo ou vão um pouco longe demais para alguém que deseja obter uma visão geral do que deve saber. sinta-se à vontade para editar isso também, provavelmente perdi algumas coisas ou cometi alguns erros.</p> <p>presumo que você conheça o conceito. bem, ainda não sei muito bem.</p><p>a resposta curta é que acredito na popularidade desse modelo para concorrência no curto e médio prazo. eu sempre adorei lambda e closures e eu vejo closures como atores especialmente feitos para a concorrência de energia. assim, os processadores de vários núcleos trazem para nós um novo paradigma para a programação, a simultaneidade é obrigatória para atingir um alto desempenho. o modelo de ator parece o caminho mais fácil para explorar o hardware moderno.</p><p>mais cedo ou mais tarde (espero que mais cedo), quase todas as linguagens convencionais suportarão um modelo melhor de simultaneidade. o modelo imho actor tão bem implementado em erlang deve ser o melhor candidato.</p><p>um obstáculo para que o modelo de ator ganhe popularidade é a pouca impedância com oop, o paradigma dominante agora. mas o primeiro passo está sendo dado, as linguagens principais estão implementando alguns recursos funcionais que irão limpar o caminho para o modelo de ator.</p><p>estou lendo muito sobre esse assunto, acho que é muito importante para todo programador avançar em suas habilidades.</p><p>edição tardia:</p><p>agora entendo melhor o paradigma. então posso dizer que é melhor uma linguagem de programação permitir que o problema seja tratado por bibliotecas ou eventualmente ter um recurso que facilite a adoção de um modelo. amarrar um idioma com apenas um modelo não dá uma boa ideia.</p> <p>aposto uma mãozada de big-big como essa hospedagem é a integrator kkkkk. eu também desenvolvi um site de um shopping em vraptor e hospedei na integrator e com medo de super dimensionar eu contratei o plano de 266 megas, mas pra minha surpresa apenas na subida do servidor com a aplicação a memória já bate os 360megas. eles tem um gráfico onde vc pode acompanhar o consumo de memória, mas o gráfico não me deixa muito claro se a memória que ele fala é a memória efetivamente utilizada no momento ou se é o tamanho do heap. o consumo grande de memória na subida da aplicação acredito que seja por causa das classes que o servidor carrega no momento de subir a aplicação, a perm gen , e uma das causas acredito que seja o cdi, se no seu beans.xml o beandiscovery estiver para all então o cdi vai gerenciar tudo então ele carrega de cara uma porrada de classes, eu mudei o discoverymode para annotated e deu uma melhorada considerável na memória inicial</p> <p>oi felipe, o garbage collector do go está embutido no core da linguagem, isso significa que está otimizado para os recursos da linguagem. tornando o gerenciamento de memória de go muito mais rápido que o das demais linguagens.</p>
<p>memory safe: o go tem uma gestão própria de memória e threads transparente ao programador, fazendo a gestão de forma automática, evitando os famosos problemas da linguagem c de alocação e invasão de memória.</p> Note-se que não se trata de "programação estrita unicode" per se, mas alguma experiência prática.


O que fizemos na minha empresa era criar uma biblioteca invólucro em torno da biblioteca ICU da IBM. A biblioteca wrapper tem uma interface UTF-8 e converte para UTF-16 quando é necessário chamar UTI. No nosso caso, nós não se preocupar muito com sucessos de desempenho. Quando o desempenho foi um problema, nós também fornecido interfaces de UTF-16 (usando o nosso próprio tipo de dados).


Aplicações poderia permanecer em grande parte como-é (usando caracteres), embora em alguns casos, eles precisam estar cientes de certas questões. Por exemplo, em vez de strncpy () usamos um invólucro que evita cortar sequências UTF-8. No nosso caso, isso é suficiente, mas também pode considerar cheques para combinar caracteres. Temos também wrappers para a contagem do número de codepoints, o número de grafemas, etc.


Quando a interface com outros sistemas, às vezes precisamos fazer composição caráter personalizado, assim você pode precisar de alguma flexibilidade lá (dependendo do aplicativo).


Nós não usamos wchar\_t. Usando UTI evita problemas inesperados na portabilidade (mas não outros problemas inesperados, é claro :-). <p><strong>principais diferenças:</strong></p><ul> <li> <p>ambos scala e f # combinam programação imperativa de oo e programação funcional em uma linguagem. porém, sua abordagem para a unificação de paradigmas é muito diferente. scala tenta <em> funde </em> os dois paradigmas em um (chamamos de paradigma funcional do objeto), enquanto f # fornece os dois paradigmas lado a lado.por exemplo, tipos de dados algébricos em f # são construções puramente funcionais sem oo'ness nelas, enquanto os adts em scala ainda são classes e objetos regulares. (observação: no processo de compilação para o bytecode do clr, até mesmo os ft adts se tornam classes e objetos)). mas eles não são visíveis para o programador f # no nível da fonte.)</p> </li> <li> <p>o f # possui inferência completa do tipo hindley-milner. scala possui inferência parcial de tipo. o suporte para subtipagem e oo-pura) torna impossível a inferência de tipo de estilo hindley-milner para o scala.</p> </li> <li> <p>scala é uma linguagem muito mais minimalista que o f #. scala possui um conjunto ortogonal muito pequeno de construções que são reutilizadas em todo o idioma. o f # parece introduzir uma nova sintaxe para cada pequena coisa, tornando-se muito pesado quanto à sintaxe em comparação com o scala. (scala tem 40 palavras-chave, enquanto f # tem 97. isso deve lhe dizer uma coisa. :-)</p> </li> <li> <p>f # sendo uma linguagem da microsoft tem um excelente suporte ide na forma do visual studio. as coisas não são tão boas no lado scala. o lado do scala $ . o plugin eclipse ainda não é o mesmo vale para o plug-in netbeans. idea parece ser a sua melhor aposta no momento, apesar de nem sequer chegar perto do que você recebe java ides. (para os fãs do emacs, existe o ensime. ouvi muitas coisas boas sobre este pacote, mas ainda não o testei.)</p> </li> <li> <p>o scala possui um sistema do tipo muito mais poderoso (e complexo) que o f #.</p> </li> </ul><hr><p><strong>outras diferenças:</strong></p><ul> <li> <p>as funções f # são exibidas por padrão. em scala, o curry está disponível, mas não é usado com muita frequência.</p> </li> <li> <p>a sintaxe do scala é uma mistura da java, standard ml, haskell, erlang e muitas outras linguagens. a sintaxe do f # é inspirada nos de ocaml, c # e haskell.</p> </li> <li> <p>o scala suporta tipos e classes superiores. f # não.</p> </li> <li> <p>scala é muito mais acessível a dsls que f #.</p> </li> </ul><hr><p>ps: eu amo ambos scala e f #, e espero que eles se tornem idiomas predominantes de suas respectivas plataformas no futuro. :-)</p>